【发布时间】:2013-02-25 19:11:09
【问题描述】:
显然,我准备的陈述是错误的,但我不确定自己做错了什么。
这两个代码段是相同的,除了第二行。
这失败了:
$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;
我做错了什么?
谢谢!
更新:已解决!
确切的问题仍然未知,但似乎与以下 cmets 中用户“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));
感谢大家。我学到了很多东西并解决了这个问题。
传达常识的信息;如果您将您的评论形成为“答案”,那么我可以接受。
【问题讨论】:
-
您遇到错误了吗?
-
顺便说一句,这样过分的命名是没有用的。
"SELECT * FROM Users WHERE EMail = :email OR Temp_EMail = :temp_email"没问题。 -
谢谢。我怀疑过度命名是没有价值的。只是想与我在调试时看到的示例保持一致。