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

なぜですか?バッククォートが本当に必要なのはいつですか? 3 つすべてが INT(11) 列なので、違いはどこにありますか

4

2 に答える 2

1

SQL 予約語でもある識別子の前後にバックティックを使用する必要があります。

MySQL の予約語のリストについては、http://dev.mysql.com/doc/refman/5.6/en/reserved-words.htmlを参照してください。

また、国際文字、句読点、または空白を含む識別子の前後にバックティックを使用する必要があります。はい、そのような識別子は SQL で許可されています。それらを区切る必要があるだけです。

于 2013-06-20T03:56:35.353 に答える