2017-03-08 12 views
-4

何が間違っていますか?私はこのメッセージを得続ける:ここPHP PDO PDOStatement-> execute()

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected' in C:\xampp\htdocs\eCommerce_arabic\admin\index.php:16 Stack trace: #0 C:\xampp\htdocs\eCommerce_arabic\admin\index.php(16): PDOStatement->execute(Array) #1 {main} thrown in C:\xampp\htdocs\eCommerce_arabic\admin\index.php on line 16

<?php 
$dsn = "mysql:host-localhost;dbname=shop"; 
$user = 'root'; 
$pass =''; 
$option = array(
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', 
); 
try { 
    $con = new PDO($dsn, $user, $pass, $option); 

    $con -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 


} 
catch (PDOException $e){ 
    echo 'failed to connect'. $e->getMessage(); 

} 

?> 
<?php 
//check if user coming from HTTP Post request 
if($_SERVER['REQUEST_METHOD'] == 'POST'){ 
    $username = $_POST['user']; 
    $password = $_POST['password']; 
    $hashedPass = sha1($password); 

$stmt = $con->prepare("SELECT username, password FROM users WHERE username=? AND password=?"); 
$stmt->execute(array($username, $password)); 

} 

?> 
+2

タイポ: 'ホストlocalhost'ホスト= localhost' 'でなければなりません。 – Barmar

+0

'$ option'配列に' PDO :: ATTR_ERRMODE => PDO :: ERRMODE_EXCEPTION'を追加することをお勧めします。そうすれば、接続を開こうとするとエラーが通知されます。 – Barmar

+0

試しにエコーすると、http://stackoverflow.com/questions/18499054/php-pdo-unable-to-connect-invalid-catalog-name –

答えて

-1

は確かにそれが正常に動作しsを作るための別の方法です。

define("SQLHOST", "127.0.0.1"); 
define("SQLUSER", "root"); 
define("SQLPASS", ""); 
define("SQLSGBD", "shop"); 
try { 
    $con = new PDO('mysql:host=' . SQLHOST . ';dbname=' . SQLSGBD . ';charset=UTF8', SQLUSER, SQLPASS); 
    $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} catch (PDOException $e) { 
    var_dump('Connection failed: ' . $e->getMessage()); 
} 
$stmt = $con->prepare("SELECT username, password FROM users WHERE username=? AND password=?"); 

if (isset($_SERVER['REQUEST_METHOD'])) { 
    if ($_SERVER['REQUEST_METHOD'] === "POST") { 
     $stmt->bindParam(1, $_POST['user'], PDO::PARAM_STR); 
     $stmt->bindParam(1, $_POST['password'], PDO::PARAM_STR); 
     $stmt->execute(); 
     $obj = $stmt->fetchall(PDO::FETCH_ASSOC); 
    } 
} 
+0

提案は良いですがcodereview.stackexchange.comのために)、それは実際にOPの質問に答えるものではありません... –

+0

彼のコードはより複雑ではありません。それを行うための適切な方法を示しているだけです。どのようにあなたのコードでホストlocalhostを動作させたいのですか? – cpugourou

0

What am I doing wrong? I keep getting this message:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected'

接続するための構文が正しくありません。 PDO_MYSQL DSNのPHPドキュメントを参照してください。 ホスト間の区切り値(ローカルホストすなわち)がないハイフン(すなわち、記号(すなわち=)に等しくなければならない - ラインは$ DSNに値を割り当てる

Example #1 Setting the connection character set to UTF-8 prior to PHP 5.3.6

<?php 
$dsn = 'mysql:host=localhost;dbname=testdb'; 

更新-)。

この行:

$dsn = "mysql:host-localhost;dbname=shop"; 
//    ^

になる:

$dsn = "mysql:host=localhost;dbname=shop"; 
//    ^