主页加载时出现PDO错误

时间:2014-08-21 15:39:48

标签: php mysql sql pdo

我在主页上有这个代码:

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

我怎么解决这个问题?!

2 个答案:

答案 0 :(得分:4)

尽管fromwhere是保留字,但char需要包含在反引号中,而不是fromwhere。您正在从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]);

将是另一种方法。