Php 加载主页时发生PDO错误
我在主页上有以下代码:Php 加载主页时发生PDO错误,php,mysql,sql,pdo,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->ass
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);
}
用户ID为null,这是错误:
致命错误:未捕获异常“PDOException”,消息为“SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第76行F:\wamp\www\StayAlive\bd\pdo.class.php中第1行“charWHERE
user\u id='0''附近使用的正确语法
我怎么能解决这个问题 即使
from
和where
是保留字,也需要用反勾号包装,而不是你的from
和where
。您正在从char
表中进行选择
请参阅MySQL.com上的列表:
进一步阐述如果您的查询是,并且作为示例: 然后必须在这些列和表名周围使用反勾号:
('Select `from` From `char` WHERE `where` = :user')
我只是提到这一点,因为有些人在消息传递系统等的查询中使用from
(和to
)和其他MySQL保留字,而他们并不知道;这种情况经常发生(我已经见过好几次了)。我们不能期望记住所有的保留字是什么,这就是为什么检查对开发人员来说很重要
例如:
尽管
from
和where
是保留字,但它需要用反勾号包装,而不是你的from
和where
。您正在从char
表中进行选择
请参阅MySQL.com上的列表:
进一步阐述如果您的查询是,并且作为示例: 然后必须在这些列和表名周围使用反勾号:
('Select `from` From `char` WHERE `where` = :user')
我只是提到这一点,因为有些人在消息传递系统等的查询中使用from
(和to
)和其他MySQL保留字,而他们并不知道;这种情况经常发生(我已经见过好几次了)。我们不能期望记住所有的保留字是什么,这就是为什么检查对开发人员来说很重要
例如:
这是正确的语法,您还可以跳过除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]);
这将是另一种方法
这是正确的语法,您还可以跳过除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]);
这是另一种方法。为什么将
From
和WHERE
包装在backticks中?('Select sex From char WHERE user_id=:user')
我认为这是问题所在,但仍然会出错。添加$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_异常)代码>在连接打开后立即执行。此外:要检查值是否为NULL,不能使用简单的比较运算符,如!=或=。你应该改为使用操作符。为什么将From
和WHERE
用反勾号包装?('Select sex From char WHERE user\u id=:user')
我认为这是问题所在,但仍然会出错。添加$dbh->setAttribute(PDO::ATTR\u ERRMODE,PDO::ERRMODE\u异常)代码>在连接打开后立即执行。此外:要检查值是否为NULL,不能使用简单的比较运算符,如!=或=。你应该改用接线员。谢谢。。这就是问题所在。。但我不明白为什么在用户id为null的情况下仍然运行查询…@MárioPassos你是受欢迎的Mário。你说“当用户id为空时”。您的查询显示为!=空
。如果查询继续,因为它是空的,那么我会说这可以解释它。谢谢。。这就是问题所在。。但我不明白为什么在用户id为null的情况下仍然运行查询…@MárioPassos你是受欢迎的Mário。你说“当用户id为空时”。您的查询显示为!=空
。如果查询继续,因为它是空的,那么我会说这可以解释它。
$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]);