【问题标题】:SQL throwing Syntax Error when using LIKE with Parameters [duplicate]使用带参数的 LIKE 时 SQL 引发语法错误 [重复]
【发布时间】: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


【解决方案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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-27
    • 1970-01-01
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    • 2017-07-07
    • 1970-01-01
    • 2023-04-09
    相关资源
    最近更新 更多