使用带参数的 LIKE 时 SQL 引发语法错误 [重复]
Posted
技术标签:
【中文标题】使用带参数的 LIKE 时 SQL 引发语法错误 [重复]【英文标题】:SQL throwing Syntax Error when using LIKE with Parameters [duplicate] 【发布时间】: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,总是让占位符被空格包围。它让程序员和解析器清楚这是一个单一的标记。并让阅读代码更容易?
【参考方案1】:
使用这个
你可以使用这两个中的任何一个
$query = $database->prepare('SELECT * FROM table WHERE column LIKE ?');
$query->execute(array('%value%'));
while ($results = $query->fetch())
echo $results['column'];
// without loop
$query = "SELECT * FROM tbl WHERE address LIKE ?";
$params = array("%$var1%");
$stmt = $handle->prepare($query);
$stmt->execute($params);
【讨论】:
以上是关于使用带参数的 LIKE 时 SQL 引发语法错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章