基本SQL语法、MAMP、PHP&;MySQL

基本SQL语法、MAMP、PHP&;MySQL,php,mysql,sql,mamp,Php,Mysql,Sql,Mamp,我知道这很简单但很烦人 为什么这样做有效: $query = $pdo->prepare('SELECT index FROM active_notifications WHERE direction = ">"'); 这是有效的: $query = $pdo->prepare('SELECT trigger_price FROM active_notifications WHERE direction = ">"'); 但这不会 $query

我知道这很简单但很烦人

为什么这样做有效:

    $query = $pdo->prepare('SELECT index FROM active_notifications WHERE direction = ">"');
这是有效的:

    $query = $pdo->prepare('SELECT trigger_price FROM active_notifications WHERE direction = ">"');
但这不会

    $query = $pdo->prepare('SELECT trigger_price, index FROM active_notifications WHERE direction = ">"');
我得到这个垃圾:


无法连接到数据库。原因:异常“PDOException”和消息“SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误

不应使用“index”等保留字作为列(或表、模式或任何需要标识符的内容)的名称

很可能,您的数据库能够从第一条语句的上下文中推断出“index”作为列的名称,但是选择多个列会导致其不明确


不管怎样,这不是真正的问题。你不想使用像“index”这样的保留字作为标识符,否则会发生奇怪的事情。尝试更改列的名称。

您可以通过在SQL语句中用`转义MySQL保留字来引用它们,即:

SELECT trigger_price, 
`index`
FROM active_notifications 
WHERE direction = ">"

更多信息请阅读。

索引是一个保留字,所以我有点惊讶第一个可以工作,但它允许我在语句一中选择索引列?
select`index`,trigger\u price
应该可以工作,但是您最好将该字段重命名为非保留字。
active\u notifications.index
也应该可以。您确定第一个可以吗?这是一种可能性,但取决于平台。这不一定适用于不同的数据库引擎。最好只使用良好的命名实践。