2011-06-09 143 views
8

我在解決一些簡單的PHP代碼問題以在MySQL表中插入記錄時遇到了困難。插入MySQL數據庫的PHP PDO代碼失敗

該代碼直接輸入到WAMP正常工作:

INSERT INTO `users` (`userName`,`userEmail`) VALUES ('orange','[email protected]') 

這PHP代碼不起作用:

<?php 
    $dbHost="localhost"; 
    $dbName="project"; 
    $dbUser="admin"; 
    $dbPassword="abcd"; 
    $dbh=new PDO("mysql:host=$dbHost;dbName=$dbName", $dbUser, $dbPassword); 
    print_r($dbh); 
    echo "</br>"; 
    print_r($dbh->errorInfo()); 

    $query=$dbh->prepare("INSERT INTO users (userName, userEmail) VALUES (?,?)"); 
    echo "</br>"; 
    print_r(var_dump($query->errorInfo())); 
    echo "</br>"; 
    print_r($query->errorCode()); 
    echo "</br>"; 
    print_r($dbh->errorInfo()); 

    $query->bindValue(1, 'apple'); 
    echo "</br>"; 
    print_r(var_dump($query->errorInfo())); 
    echo "</br>"; 
    print_r($query->errorCode()); 
    echo "</br>"; 
    print_r($dbh->errorInfo()); 

    $query->bindValue(2, '[email protected]'); 
    echo "</br>"; 
    print_r(var_dump($query->errorInfo())); 
    echo "</br>"; 
    print_r($query->errorCode()); 
    echo "</br>"; 
    print_r($dbh->errorInfo()); 

    $inserted=$query->execute(); //True if succesful, False if not. 
    echo "</br>"; 
    print_r(var_dump($query->errorInfo())); 
    echo "</br>"; 
    print_r($query->errorCode()); 
    echo "</br>"; 
    print_r($dbh->errorInfo()); 
    echo "</br>"; 
    if ($inserted){print_r("true");}else{print_r("false");}; 
?> 

什麼,當我執行的頁面,我得到如下打印:

PDO Object () 
Array ([0] => [1] => [2] =>) 
array(3) { [0]=> string(0) "" [1]=> NULL [2]=> NULL } 

Array ([0] => 00000 [1] => [2] =>) 
array(3) { [0]=> string(0) "" [1]=> NULL [2]=> NULL } 

Array ([0] => 00000 [1] => [2] =>) 
array(3) { [0]=> string(0) "" [1]=> NULL [2]=> NULL } 

Array ([0] => 00000 [1] => [2] =>) 
array(3) { [0]=> string(5) "3D000" [1]=> int(1046) [2]=> string(20) "No database selected" } 
3D000 
Array ([0] => 00000 [1] => [2] =>) 
false 

記錄沒有插入到數據庫中。我做錯了什麼?我不確定我應該在print_r中看到什麼,我正在爲他們提供幫助。

謝謝

JDelage

編輯 - 我說的意見建議的print_r的。

這是我在WAMP看到:似乎

http://jdelage.public.s3.amazonaws.com/project_sch.jpg

+4

你能嘗試運行'的print_r($ dbh-> errorInfo中());'連接和查詢後?這應該提供一些有用的調試信息。 – lonesomeday 2011-06-09 20:51:57

+1

你需要在這裏做什麼而不是所有的打印語句是檢查'$ query'的錯誤狀態'var_dump($ query-> errorInfo());'並檢查'$ query-> errorCode()' – 2011-06-09 20:52:54

+0

我修改了代碼以包含這些代碼。 – JDelage 2011-06-09 21:10:46

回答

4

錯誤消息,表明您已經連接到數據庫罰款,但該項目數據庫尚未選定。

可以肯定它試圖用正確的DSN改正,我會嘗試改變連接字符串直接包含值,而不是變量,即:

'mysql:host=localhost;dbname=project' 

這不應該有所作爲,但值得檢查。

如果這樣做不起作用,並且由於您似乎可以連接到MySQL,解決方法可能是將數據庫名稱作爲查詢的一部分。所以你上面的查詢會變成:

$query=$dbh->prepare("INSERT INTO project.users (userName, userEmail) VALUES (?,?)"); 
+0

用「INSERT INTO project.users ...」取代「插入用戶...」的作品。謝謝 - 但我必須說我仍然不明白問題.... – JDelage 2011-06-09 22:50:52

1

很奇怪的問題,看來你需要在小寫字母輸入dbname才能正常連接到數據庫。

所以它應該是:

mysql:host=$dbHost;dbname=$dbName