【问题标题】:SQL Error SQLSTATE[42000] on LIKE operationLIKE 操作上的 SQL 错误 SQLSTATE[42000]
【发布时间】:2019-06-02 13:34:59
【问题描述】:

我想使用简单的查询进行搜索。

此查询在另一个页面和另一个表中运行良好。 我只是复制并粘贴了它。

这里是查询

    $stmt = $pdo->prepare("SELECT * FROM _all_users WHERE fullname LIKE '%".$q."%' OR mobile LIKE '%".$q."%' ORDER BY time_stamp DESC");
    $stmt->execute();

它必须工作。但是我收到了这个错误

致命错误:未捕获的 PDOException:SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 /var/www/_am/ajax/getLists 的第 1 行的“OR‌ mobile LIKE '%848%' ORDER BY time_stamp DESC LIMIT 15 OFFSET 0”附近使用正确的语法。 php:171 堆栈跟踪:#0 /var/www/_am/ajax/getLists.php(171): PDO->prepare('SELECT * FROM _...') #1 {main} 抛出 /var/www /_am/ajax/getLists.php 第 171 行

有什么想法吗?

【问题讨论】:

  • $q 的值是多少?插入变量后的查询是什么样的?
  • 请阅读SQL injection。不要使用字符串连接构建查询,而是使用 prepared statementsbound parameters。请参阅 this pagethis post 了解一些很好的示例。
  • 请只显示整个查询。这并不难做到。如果您需要我们的帮助,您应该按照我们的要求去做。我们在帮一个忙。请尊重这一点,并为我们提供实际帮助您所需的东西。事实上,您也应该展示构建该查询的代码。
  • 没关系。如果你不能提供我要求的东西,我无法帮助你。祝你好运。
  • @roberthofer 通过阅读上述 cmets:了解使用 PDO 本身并不能保护您免受 SQL 注入。如果您使用绑定参数,则使用准备好的语句只会保护您免受 SQL 注入。在没有绑定参数的查询上使用prepare(正如您在此处所做的那样)根本无法提供任何保护。

标签: php mysql


【解决方案1】:

试试

$stmt = $pdo->prepare("SELECT * FROM _all_users (WHERE fullname LIKE '%".$q."%' OR mobile LIKE '%".$q."%') ORDER BY time_stamp DESC");
    $stmt->execute();

$stmt = $pdo->prepare("SELECT * FROM _all_users WHERE (fullname LIKE '%".$q."%' OR mobile LIKE '%".$q."%') ORDER BY time_stamp DESC");
    $stmt->execute();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    • 2015-07-15
    • 2014-08-27
    • 1970-01-01
    • 2015-05-10
    相关资源
    最近更新 更多