2017-09-13 73 views
0

我有问题,从我的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; 
     } 

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

Error: SELECT * FROM obojok WHERE id_uzivatela = '******' AND id_zvierata IS NULL
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'is null AND id_uzivatela='20170'' at line 1

+3

错误与您的查询不符 –

+0

您的意思是? – majkx00

+0

他意味着'是null AND id_uzivatela ='20170'(来自错误消息)无处可寻找您的实际查询。您可能需要再次检查您在此显示的代码是否正确拷贝了 – Cashbee

回答

-2

SELECT * FROM obojok WHERE id_uzivatela ='“。$ _ SESSION ['uzivatel'] ['id']。''OR id_zvierata IS NULL

+0

这不是一个解决方案@Adrian Wolff –

+0

你为什么改变查询的行为?现在情况很好。 – Salketer

0

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

错误出现在PHP代码中。

A 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()

1

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

从技术文档中,$返回如果你想看看您的查询工作,不要真值测试conn->查询不应该严格等于TRUE

Returns FALSE on failure. For successful SELECT, SHOW, DESCRIBE or EXPLAIN queries mysqli_query() will return a mysqli_result object.

,你最好测试在没有虚假...

$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); 

这意味着使$水库=到$ conn->查询值,如果它不等于假。如果它是错误的,用相关信息抛出异常。

如果你这样做,如果$ res是好的,你将不必测试。它也将极大地帮助您找到发生错误的位置。