如果显示错误为“试图获取非对象的属性”,如何识别代码中的非对象?
Posted
技术标签:
【中文标题】如果显示错误为“试图获取非对象的属性”,如何识别代码中的非对象?【英文标题】:how to identify which is a non-object in the code if it shows error as `trying to get property of non-object`? 【发布时间】:2017-01-22 23:56:21 【问题描述】:对现有脚本进行一些修改后,我创建了一个错误:
注意:正在尝试获取非对象的属性...
我试图弄清楚如何识别变量 $result
是否是一个对象,所以我没有收到此错误(我在此特定行上收到错误 if ($result-> num_rows > 0)
)。这里有什么:
<?php
$sql = "SELECT * FROM input WHERE id =".$_GET["id"];
$result = mysqli_query ($conn,$sql);
if ($result-> num_rows > 0)
while($row -> $result->fetch_assoc())
$myid = $row["id"] ;
$sql2 = "SELECT * FROM output WHERE question_id = $myid ORDER BY date DESC";
$result2 = $conn->query($sql2);
$sql3 = "SELECT COUNT(*) as rowCount FROM output WHERE question_id = '".$myid."'";
$result3 = $conn->query($sql3);
$rowCount= $result3->fetch_assoc();
?>
如何事先判断这是否是一个对象?
【问题讨论】:
我认为您已经以程序方式运行查询,并且以面向对象的方式获取数据是问题的原因。 $result 不是对象,因为您的查询失败,您需要调试它 作为一个小建议,不要在不清理或使用准备好的语句的情况下将 GET 参数连接到查询。搜索mysql注入 【参考方案1】:首先,在此之前,您是否在代码中的任何位置初始化了变量$conn
?
其次,你想让你的 while 循环像这样:while($row = $result->fetch_assoc()) ...
【讨论】:
"Yes" ,我在脚本中包含了 $conn。并且“不”将 -> 更改为 = 没有给出任何线索.. 猜猜发生了什么变化 ->if ($result-> num_rows > 0)
中的 = 使 num_rows
成为常数..
我不确定,但它可能是 $result-> num_rows 之后的空间,以及关于 $result = $row->fetch_assoc() 我从这里得到的:php.net/manual/en/mysqli-result.fetch-assoc.php
之前我也这么认为,num_rows 前面的 $ 符号是否可能是原因,但它没有相反,我什至将 -> 更改为 =,但它有点为新错误留出了空间..跨度>
我建议调试你的代码,尝试在执行循环之前查看它包含的 $results 变量,就像在 $result = mysqli_query($conn,$sql) 之后注释掉所有代码,检查一下,看看你的代码哪里出了问题。【参考方案2】:
你可以使用查找内容是数组还是对象:
is_object() to find object
is_array() to find array
$sql = "SELECT * FROM compt WHERE id =1";
$result = mysqli_query ($conn,$sql);
if ($result->num_rows > 0)
while($row = $result->fetch_assoc())
【讨论】:
你是什么意思,.. 我认为我的代码是一个对象。 我的意思是如何检查内容是数组还是对象。 ...在您上面的代码中,您犯了错误,这就是它给出错误的原因......它可能在 $result-> num_rows 使用这个........if ($result->num_rows > 0) while($row = $result->fetch_assoc()) 而不是 $row-> 在 while($row -> $result->fetch_assoc()) 处使用 '=' 你的意思是if ($result->num_rows > 0) while($row = $result->fetch_assoc())
以上是关于如果显示错误为“试图获取非对象的属性”,如何识别代码中的非对象?的主要内容,如果未能解决你的问题,请参考以下文章