我正在构建一个自动完成下拉框,并且有一个功能性 SQL 调用可以找到我正在搜索的内容,但是当我尝试将其集成到正确的 PDO 语句中时,我无法摆脱此错误消息:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND city LIKE CONCAT('van', '%') ORDER BY display_value' at line 1' in /home/asdf/index-ajax.php:61
Stack trace:
#0 /home/asdf/index-ajax.php(61): PDOStatement->execute(Array)
#1 {main}
thrown in /home/asdf/index-ajax.php on line 61
这是我的代码:
$qry = $CFG["DBH"]->prepare("SELECT DISTINCT CONCAT( city, ', ', prov_stat, ', ', country ) AS display_value FROM `contact` AND city LIKE CONCAT('%', :contactCity, '%') ORDER BY display_value;");
$qry->execute(array(':contactCity' => "van"));
我尝试寻找一些引用资料来讨论此消息、为什么会发生以及如何处理它,但它似乎很常见,而且我读到的任何内容都没有包含 Elixir 。谁能看到我的代码中的问题吗?
最佳答案
自从我编写 SQL 以来已经有一段时间了,但是您的列列表似乎有些不对劲:
$qry = $CFG["DBH"]->prepare("SELECT DISTINCT CONCAT( city, ', ', prov_stat, ', ', country ) AS display_value FROM `contact` AND city LIKE CONCAT('%', :contactCity, '%') ORDER BY display_value;");
$qry->execute(array(':contactCity' => "van"));
我认为您不能使用 AND
将两列连接在一起,尤其是在选择表格之后。此外,据我所知,您无法直接在 SELECT
中过滤查询 (WHERE
)。
像这样的东西可能会起作用:
$qry = $CFG["DBH"]->prepare(
"SELECT DISTINCT
CONCAT( city, ', ', prov_stat, ', ', country ) AS display_value,
city
FROM `contact`
WHERE city LIKE CONCAT('%', :contactCity, '%')
ORDER BY display_value;"
);
$qry->execute(array(':contactCity' => "van"));
关于PHP/PDO SQLSTATE[42000] : Syntax error or access violation: 1064 Nightmare,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32803321/