【问题标题】:MySQL query issue : WHERE clauseMySQL 查询问题:WHERE 子句
【发布时间】:2016-12-07 07:35:44
【问题描述】:

我最近从 windows (movamp) 切换到 linux (lamp),但我遇到了一个查询问题(语法错误),我不知道为什么。 这是我得到的查询和错误消息:

"SELECT * FROM products WHERE trash='false'"

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '\'false\'' 附近使用正确的语法SELECT * FROM products WHERE tram='false'

我总是用这种语法编写查询,我从来没有遇到过问题。

我曾经在 windows (php 4.1.22 mysql 5.2.11) 上运行我的代码并使用 mysql_query() 函数,并且代码运行良好。 现在我使用(php 7.0.8 - mysql 5.7.16) 并使用 mysqli_query() 函数来执行查询

【问题讨论】:

  • 使用 mysqli_escape_string 因为分配它们
  • 你试过不加单引号吗?似乎您试图逃避单引号,这导致了问题
  • 如果值应该是字符串,则使用false;如果值应该是布尔值,则使用 false

标签: php mysql


【解决方案1】:

您的语法错误显示了查询中不存在的一些虚假反斜杠,就好像您实际上正在运行这个:

SELECT * FROM products WHERE trash=\'false\'

甚至没有完整的 PHP 语句可供检查,我们只能推测,我的猜测是——因为你是从一个非常古老的 PHP 版本升级——你可能会遇到magic quotes 的一些问题。该“功能”不再存在,因此服务器中的任何内容都无法自动注入反斜杠,因此必须是您的代码故意这样做。

据说,PHP/4 在 2004 年(大约 12 年)被 PHP/5 取代,并且在向 PHP/7 的道路上发生了很多变化:迁移将比在新版本中删除代码更难服务器。

【讨论】:

    【解决方案2】:

    尝试删除单引号,或尝试颠倒单引号和双引号。如果没有任何效果,请使用具有 false 值的变量。

    【讨论】:

      【解决方案3】:
      "SELECT * FROM `products` WHERE `trash` ='false'"
      

      试试这个(虽然你的情况也应该有效)

      如果您尝试在 PHPMYadmin 中运行 SQL 查询,也请尝试删除双引号。

      【讨论】:

        【解决方案4】:

        我要感谢大家的回答和 cmets。您帮我找出了问题所在:整个查询字符串都被转义了,而不仅仅是需要转义的数据。

        我觉得自己很笨?。这很明显。

        无论如何。非常感谢您的贡献。

        【讨论】:

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