试图获取非对象MySQLi结果的属性

Ric*_*haw 6 php mysqli

得到了一些我正在努力的PHP代码 - 在谷歌等地搜索并尝试了所提到的一切,但由于某种原因我无法解决它.

问题是:

我有一些代码正在查询数据库是否存在特定用户.

代码(它是类中的方法)

<?php
global $mysqli;
// Query specified database for value
$q = 'SELECT id FROM ' . $database . ' WHERE username = \'' . $username . '\'';
$r = $mysqli->query($q);
var_dump($r);
if ($r->num_rows) {
    // If row found username exists so return false
    return false;
}
...
?>
Run Code Online (Sandbox Code Playgroud)

我已经转储了查询的结果($ r)并得到了这个:

object(mysqli_result)#4 (5) { ["current_field"]=> int(0) ["field_count"]=> int(1) ["lengths"]=> NULL ["num_rows"]=> int(1) ["type"]=> int(0) }
Run Code Online (Sandbox Code Playgroud)

这是正确的,上面应该只有1行.

我确实得到这个错误链接到行说 if ($r->num_rows) {

注意:尝试在LINE行的FILE中获取非对象的属性

但我不知道为什么因为该对象是有效的(如上所述),它应该工作正常.从我所能看出它似乎正常,我只是想知道为什么会有错误.我相信这很简单,但我会感激任何帮助.

kem*_*ila 18

$sql = "SELECT * FROM table";
$result = $conn->query($sql);

if (!$result) {
    trigger_error('Invalid query: ' . $conn->error);
}
Run Code Online (Sandbox Code Playgroud)

使用mysqli_error()函数检查错误

可能你的查询有一些错误.


Rel*_*rus -2

只是想我会对此进行一些扩展。

如果执行返回 0 个结果的 MYSQLI SELECT 查询,则返回 FALSE。

但是,如果您收到此错误并且您已经编写了自己的 MYSQLI 查询函数,那么如果您运行的查询不是选择而是更新,您也可能会收到此错误。更新查询将返回 TRUE 或 FALSE。因此,如果您只是假设任何非错误结果都会返回记录,那么当您运行更新或除选择之外的任何操作时,您就会出错。

一旦您检查其不为假,最简单的解决方案是首先检查查询的结果是否是一个对象。

    $sqlResult = $connection->query($sql);
    if (!$sqlResult)
    {
     ... 
    }
    else if (is_object($sqlResult))
    {
        $sqlRowCount = $sqlResult->num_rows;
    }
    else
    {
        $sqlRowCount = 0;
    }
Run Code Online (Sandbox Code Playgroud)