【问题标题】:MYSQL where $var AND IS NULLMYSQL,其中 $var AND 为 NULL
【发布时间】:2017-09-13 23:25:43
【问题描述】:

我在处理 MySQL 数据库中的信息时遇到问题,我有以下代码:

$sql = "SELECT * FROM obojok WHERE id_uzivatela = '".$_SESSION['uzivatel']['id']."' AND id_zvierata IS NULL";
      $res = $conn->query($sql);
      if ($res === TRUE) {
        echo "DATA Obtained";
      } else {
        echo "Error: " . $sql . "<br>" . $conn->error;
      }

但我唯一得到的是这个错误:

错误:SELECT * FROM obojok WHERE id_uzivatela = '******' AND id_zvierata IS NULL
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'is null AND id_uzivatela='20170'' 附近使用正确的语法

【问题讨论】:

  • 错误与您的查询不匹配
  • 你是什么意思?
  • 他的意思是is null AND id_uzivatela='20170'(来自错误消息)在您的实际查询中找不到。您可能需要再次检查您在此处显示的代码是否正确复制粘贴
  • 错误信息和你的sql不匹配
  • if ($res === TRUE) { 我有三倍 === -.- 谢谢 :)

标签: php mysql select isnull


【解决方案1】:

您的查询没有问题...您看到的错误来自另一个查询。

根据文档,$conn->query 的返回值不应严格等于 TRUE

失败时返回 FALSE。对于成功的 SELECT、SHOW、DESCRIBE 或 EXPLAIN 查询 mysqli_query() 将返回一个 mysqli_result 对象。

如果您想查看您的查询是否有效,请不要测试真值,您最好测试非假...

  $sql = "SELECT * FROM obojok WHERE id_uzivatela = '".$_SESSION['uzivatel']['id']."' AND id_zvierata IS NULL";
  $res = $conn->query($sql);
  if ($res != FALSE) {
    echo "DATA Obtained";
  } else {
    echo "Error: " . $sql . "<br>" . $conn->error;
  }

编辑: 我完全忘记指出,由于您看到的错误来自另一个查询,因此您也必须修复该查询!长期以来,我在编写这样的查询时的一个习惯就是这样写:

$sql = "SELECT * FROM obojok WHERE id_uzivatela = '".$_SESSION['uzivatel']['id']."' AND id_zvierata IS NULL";
$res = $conn->query($sql) or throw new Exception("Error: " . $sql . "<br>" . $conn->error);

这意味着 $res = 如果 $conn-> 查询值不等于 false。如果为 false,则抛出异常并提供相关信息。

如果你这样做,你就不必在 $res 好坏之后进行测试。它还将极大地帮助您找到发生错误的位置。

【讨论】:

    【解决方案2】:

    错误不在查询中。至少,不在问题中发布的查询中。

    错误在 PHP 代码中。

    SELECT 查询永远不会返回 TRUE。成功时返回一个对象。 mysqli_resultPDOStatement,取决于您使用的 MySQL 库。

    您的查询成功并且$res 是一个对象。它不是TRUE,测试$res === TRUE 失败并且代码错误地运行else 分支。然后它报告它刚刚成功运行的正确查询和最近失败查询的错误消息。这解释了为什么错误消息中服务器列出的查询片段与您运行的查询不匹配。

    检查查询结果的正确方法是$res != FALSE。不管你用==还是===$res要么是一个对象(无论怎么比较都不等于FALSE)或者FALSE。您也可以使用$res。是一样的:

    $sql = "SELECT * FROM obojok WHERE id_uzivatela = '".$_SESSION['uzivatel']['id']."' AND id_zvierata IS NULL";
    $res = $conn->query($sql);
    if ($res) {
        echo "DATA Obtained";
    } else {
        echo "Error: " . $sql . "<br>" . $conn->error;
    }
    

    根据您使用的 MySQL 库,阅读有关 mysqli::query() 和/或 PDO::query() 的更多信息。

    【讨论】:

      【解决方案3】:

      SELECT * FROM obojok WHERE id_uzivatela = '".$_SESSION['uzivatel']['id']."' OR id_zvierata 为空

      【讨论】:

      • 这不是解决方案@Adrian Wolff
      • 你为什么改变查询的行为??本来就很好。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-01
      • 2012-09-09
      • 2019-05-29
      • 2012-03-12
      • 2014-07-29
      • 2020-09-22
      • 1970-01-01
      相关资源
      最近更新 更多