Php 注意:尝试获取非对象的属性

Php 注意:尝试获取非对象的属性,php,mysql,mysqli,Php,Mysql,Mysqli,我遇到了一些问题,得到了获取非对象see代码属性的通知 <?php $sql = "SELECT countt FROM diary where created='".date('Y-m-d')."' AND user_id='".$_SESSION['user']['id']."'"; $result = mysqli_query($db, $sql); if ($result->num_rows>0) { while($ro

我遇到了一些问题,得到了获取非对象see代码属性的通知

<?php 
$sql = "SELECT countt FROM diary where created='".date('Y-m-d')."' AND user_id='".$_SESSION['user']['id']."'";
        $result = mysqli_query($db, $sql);
        if ($result->num_rows>0) {
        while($row = mysqli_fetch_assoc($result)) {
              $te = $row['countt'];
        }
        } else {
    $te = 0;
            }
?>

您的查询失败,您应该这样做

if (!$result) { die('Error: ' . mysqli_error($db)); }
如果您同时使用MYSQLI过程性的和面向对象的,您应该避免这种情况,以便于代码维护

将此
if($result->num\u rows>0)
替换为此
if(mysqli\u num\u rows($result)>0)

注意:您应该使用准备好的语句来避免SQL注入。


参考,检查结果计数,打印结果数组:)使用
$row\u cnt=mysqli\u num\u rows($result)
而不是
$result->num_rows
如果
$result->num_rows
不起作用,则表示
$result
不是对象。因此,查询必须没有结果,或者您的查询有问题。仔细检查。您的查询失败(返回
false
而不是结果集)。在您进行查询之后立即添加一些错误检查:
if(!$result){die('error:'.mysqli_error($db));}
以找出原因。只要在尝试使用结果集之前检查错误(您无论如何都应该这样做),将它们混合在一起不应该成为问题。然而,在我看来,为了保持一致性,您应该使用或,但这不是必须的。@MagnusEriksson感谢您的指点,我刚刚测试了您所说的,它可以按照您所说的那样工作。如果查询返回零结果,代码仍然可以工作(您仍然可以得到一个结果集)。如果查询失败,那么它将返回false。失败和零是两件不同的事情。是的,在这种情况下,他的查询会失败。这就是为什么最好的建议是使用:
if(!$result){die('Error:'.mysqli_Error($db));}
来找出原因。
if (!$result) { die('Error: ' . mysqli_error($db)); }