0

好的,所以我有这个标准查询来获取用户的消息

$s=$this->select()->where("to=?",$user->id)->orWhere("from=?",$user->id);

它在 to 附近给出了一个语法错误。

生成的sql

SELECT `messages`.* FROM `messages` WHERE (to='1')

phpymysql中也报错

所以我发现在 to 和 from 周围使用反引号可以让它消失

$s=$this->select()->where("`to`=?",$user->id)->orWhere("`from`=?",$user->id);

这让我有点困惑,因为我不需要在同一个数据库的另一个表中这样做

$select=$this->select()->where("city_id=?",$city->city_id);
//Works just fine w/o backticks

为什么会这样?什么时候真的需要反引号?这三个都是 INT(11) 列,所以区别在哪里

4

2 回答 2

3

TO是mysql中的关键字。如果我们使用关键字作为字段名,那么它必须包含在反引号中以区分它不应该用作关键字

于 2013-06-20T04:03:11.260 回答
1

您需要在也是 SQL 保留字的标识符周围使用反引号。

有关 MySQL 中保留字的列表,请参阅http://dev.mysql.com/doc/refman/5.6/en/reserved-words.html

您还需要在包含国际字符、标点符号或空格的标识符周围使用反引号。是的,SQL 中允许使用此类标识符,您只需要对它们进行分隔即可。

于 2013-06-20T03:56:35.353 回答