【发布时间】:2016-07-16 17:27:22
【问题描述】:
我正在使用 PDO 和 PHP 向我的 SQL 服务器提交查询。我需要使用 LIKE 子句来检查用户名以确保它被允许(例如;它不包含任何禁止的词),所以我使用这个 SQL 查询...
SELECT * FROM `table` WHERE (`name` LIKE %?%);
我稍后会像这样使用 PDO 插入参数...
$statement->bindParam(1, $username)
当我尝试运行它时,我得到了这个错误......
致命错误:未捕获的异常 'PDOException' 带有消息 'SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在 C:\xampp\htdocs\scripts\sql.php:57 中的第 1 行的 '%'dibdibs'%)' 附近使用正确的语法 堆栈跟踪:#0 C :\xampp\htdocs\scripts\sql.php(57): PDOStatement->execute() #1 C:\xampp\htdocs\api\users.php(30): dibdibs\pdo->query('SELECT * FROM `...', Array) #2 {main} 在第 5 行的 C:\xampp\htdocs\scripts\sql.php 中抛出
当我使用= 而不是LIKE 时,PDO 代码适用于其他查询,但是当我尝试使用LIKE 子句时抛出上述错误。
我已将完整代码放在Pastebin,如果您需要查看。 我正在使用 GET 来获取数据,因为我将它与 AJAX 一起使用(也可以正常工作),但我尝试过的用户名是“dibdibs”,在其他查询中也可以正常工作。 p>
【问题讨论】:
-
使用
name LIKE ?,然后绑定类似$statement->bindParam(1, "%$username%")的东西 -
imo,总是让占位符被空格包围。它让程序员和解析器清楚这是一个单一的标记。并让阅读代码更容易?
标签: php pdo syntax-error sql-like