我的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''附近使用正确的语法
答案 0 :(得分:1)
您的查询没有问题...您看到的错误来自另一个查询。
从文档中,$ conn-&gt;查询的返回不应严格等于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);
这意味着如果不等于false,则将$ res =设置为$ conn-&gt;查询值。如果为false,则抛出相关信息的异常。
如果你这样做,你就不必在$ res好或不好之后进行测试。它还可以帮助您找到错误发生的位置。
答案 1 :(得分:0)
错误不在查询中。至少,不在问题中发布的查询中。
错误在PHP代码中。
SELECT
查询永远不会返回TRUE
。它成功时返回一个对象。可以是mysqli_result
或PDOStatement
,具体取决于您使用的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()
。
答案 2 :(得分:-2)
SELECT * FROM obojok WHERE id_uzivatela =&#39;&#34;。$ _ SESSION [&#39; uzivatel&#39;] [&#39; id&#39;]。&#34;&#39;或id_zvierata IS NULL