0

明らかに、私は声明を間違って準備していますが、何が間違っているのかはわかりません。

これら 2 つのコード セグメントは、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` = 'me@example.com' OR `Users`.`Temp_EMail` = 'me@example.com'");
    $sth->execute(array(':email' => $email, ':temp_email' => $email));
    $sth->setFetchMode(PDO::FETCH_ASSOC);
    $res = $sth->fetch();
    $dbh = null;

私は何を間違っていますか?

ありがとう!

更新:解決しました!

正確な問題はまだ不明ですが、以下のコメントでユーザー 'Your Common Sense' によって提案された '過度の命名' に関連しているようです。

これはうまくいきます:

$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

3 に答える 3

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;
于 2013-02-26T00:32:34.410 に答える
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);

エラーがある場合 - 通知されます。
存在しない場合は、タイプミスのような問題を確認してください。

于 2013-02-25T19:19:38.833 に答える
0

簡単に試してみてください - この 2 行で正しく理解できましたか?

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

言い換えれば... $email 変数を設定しましたか?

于 2013-02-25T19:26:37.590 に答える