2017-03-08 123 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

是確保它那正常工作的另一種方法。

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

他的代碼不能更混亂。只是試圖展示一個正確的方式來做到這一點。你希望host-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文檔。

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

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

更新分配值$ DSN行 - 中主機和值(即本地主機)之間的分隔符應該是一個等號(即=),而不是一個連字符(即-)。

這條線:

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

變爲:

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