使用带参数的 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 引发语法错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

C#中 SQL语句 带参数的like 查询怎么写

SQL like 语句问题

PB数据窗口中SQL语句动态LIKE后边加参数如何加?

在sql代码中使用Like运算符。语法错误

400 bad Request -- 参数不当引发的错误

java中PreparedStatement执行带参数的sql语句如何实现模糊查询?