2013-02-25 80 views
0

顯然,我正在準備錯誤的陳述,但我不確定我做錯了什麼。我的PDO準備聲明有什麼問題?

這2個代碼段是相同的,,除了第二行的

這種失敗:

$dbh = new PDO('mysql:host=localhost;dbname=' . $DB_Database, $DB_UserName, $DB_Password); 
    $sth = $dbh->prepare("SELECT * FROM `PNB`.`Users` WHERE `Users`.`EMail` = :email OR `Users`.`Temp_EMail` = :temp_email"); 
    $sth->execute(array(':email' => $email, ':temp_email' => $email)); 
    $sth->setFetchMode(PDO::FETCH_ASSOC); 
    $res = $sth->fetch(); 
    $dbh = null; 

這個硬編碼的測試原理:

$dbh = new PDO('mysql:host=localhost;dbname=' . $DB_Database, $DB_UserName, $DB_Password); 
    $sth = $dbh->prepare("SELECT * FROM `PNB`.`Users` WHERE `Users`.`EMail` = '[email protected]' OR `Users`.`Temp_EMail` = '[email protected]'"); 
    $sth->execute(array(':email' => $email, ':temp_email' => $email)); 
    $sth->setFetchMode(PDO::FETCH_ASSOC); 
    $res = $sth->fetch(); 
    $dbh = null; 

我在做什麼錯?

謝謝!

更新:解決!

確切的問題仍然未知,但似乎與下面評論中用戶'您的常識'提出的'過多的命名'有關。

這只是正常:

$dbh = new PDO('mysql:host=localhost;dbname=' . $DB_Database, $DB_UserName, $DB_Password); 
$sth = $dbh->prepare("SELECT * FROM Users WHERE EMail=:email OR Temp_EMail=:temp_email"); 
$sth->execute(array(':email' => $email, ':temp_email' => $email)); 

感謝大家。我學到了很多,解決了這個問題。

給您常識的留言;如果您將您的評論形成「答案」,那麼我可以接受它。

+4

你得到一個錯誤? – Barmar 2013-02-25 19:16:17

+0

順便說一句,這種過度的命名沒有用處。 ''SELECT * FROM Users WHERE EMail =:email OR Temp_EMail =:temp_email「'沒問題。 – 2013-02-25 19:21:20

+0

謝謝。我懷疑過度的命名是沒有價值增加的。只是想與我在調試時看到的例子保持一致。 – Eric 2013-02-25 19:49:42

回答

0

這很難回答。
你的代碼對我來說似乎沒問題。所以,調試似乎是唯一的方法。

我在做什麼錯?

總是從您的PDO中提出這個問題。
你連接到PDO時,都會做這種方式(也請確保您可以看到錯誤,無論是在屏幕上或登錄):

error_reporting(E_ALL); 
$opt = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION); 
$dsn = 'mysql:host=localhost;dbname=' . $DB_Database; 
$dbh = new PDO($dsn, $DB_UserName, $DB_Password, $opt); 

,如果有一個錯誤 - 你會收到通知。
如果沒有 - 檢查錯字類問題。

+0

我將在哪裏收到通知?我試過了,沒有區別。查詢失敗,我不知道爲什麼。 – Eric 2013-02-25 19:46:47

0

只是一個快速嘗試 - 你是否明白這兩條線?

$sth = $dbh->prepare("SELECT * FROM `PNB`.`Users` WHERE `Users`.`EMail` = :email OR `Users`.`Temp_EMail` = :temp_email"); 
$sth->execute(array(':email' => '[email protected]', ':temp_email' => '[email protected]')); 

換句話說......您是否設置了您的$ email變量?

+0

不,我得到了同樣的結果。查詢失敗。試着從用戶'你的常識'中嘗試錯誤報告步驟。 – Eric 2013-02-25 19:39:17

0

試試這個

$dbh = new PDO('mysql:host=localhost;dbname=' . $DB_Database, $DB_UserName, $DB_Password); 
$sth = $dbh->prepare("SELECT * FROM `PNB`.`Users` WHERE `Users`.`EMail` = :email OR `Users`.`Temp_EMail` = :temp_email"); 
$sth->bindParam(':email', $email, PDO::PARAM_STR); 
$sth->bindParam(':temp_email', $email, PDO::PARAM_STR); 
$sth->execute(); 
$res = $sth->fetch(PDO::FETCH_ASSOC); 
$dbh = null;