我在主页上有这个代码:
if ($interface->getsession("userid") != Null) {
$dbh->query('Select sex `From` char `WHERE` user_id = :user');
$dbh->bind(':user',$interface->getsession("userid"));
$_gender = $dbh->single();
$smarty->assign("gender",$_gender);
}
userid为null,这是错误:
致命错误:未捕获的异常' PDOException' with message' SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;检查与您的MySQL服务器版本相对应的手册,以便在#char;
WHERE
user_id =' 0''''''''''''在第1行'在第76行的F:\ wamp \ www \ StayAlive \ bd \ pdo.class.php
我怎么解决这个问题?!
答案 0 :(得分:4)
尽管from
和where
是保留字,但char
需要包含在反引号中,而不是from
和where
。您正在从char
表格中进行选择。
参考MySQL.com上的列表:
进一步详细说明; 您的查询是 ,例如:
('Select from From char WHERE where = :user')
那么你将不得不在这些列和表名称周围使用反引号:
('Select `from` From `char` WHERE `where` = :user')
我只是提到这一点,因为有些人在查询邮件系统等时会使用from
(和to
)和其他MySQL保留字,而他们不知道; 它发生(我已经看过很多次了)。我们不能指望记住所有保留字是什么,这就是为什么检查the list of reserved keywords对开发人员很重要。
例如:
('SELECT `from` FROM `tablename` WHERE `to` = :user')
答案 1 :(得分:0)
$dbh->query('SELECT `sex` FROM `char` WHERE `user_id` = :user');
将是正确的语法,你也可以跳过除char之外的所有`,因为它是一个SQL语法词。
$stm_getsex = $dbh->prepare("SELECT `sex` FROM `char` WHERE `user_id` = ?");
$stm_getsex->execute(array($interface->getsession("userid"));
$gender = $stm->fetchAll();
$smarty->assign("gender", $gender[0]);
将是另一种方法。