我试图写我的第一个PHP查询,我得到以下
错误:
注意:尝试获取非对象的属性D:'Home'web'username'helloworld.php on line 36.
我做错了什么?
代码:
<?php
ini_set('display_errors', 1);
error_reporting(~0);
$servername = "myserver.com";
$username = "myusername";
$password = "mypassword";
$dbname = "mydbname";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT * FROM books";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. "<br>";
}
} else {
echo "0 results";
}
$conn->close();
?>
好的,你的代码看起来是这样的:
$sql = "SELECT * FROM books";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. "<br>";
}
} else {
echo "0 results";
}
问题出在$result->num_rows > 0
显然你有一个错误在你的查询,所以你的$result
是一个布尔值而不是一个对象,所以属性num_rows
不存在。一个更好的解决方案是:
if($result !==false){
//handle your result here
}else{
echo "An error appeared: ".$conn->error;
}
语法和逻辑是正确的,但是查询没有成功执行。试着在if ($result->num_rows > 0)
条件之前放置一个if
条件来检查。
同样,我可以通过拼错表名来重现错误。那么,您确定数据库中存在表books
吗?改正它就能解决问题了
您的查询有问题。你们有一个叫"书"的桌子吗?你拼错了吗?
你的代码:if ($result->num_rows > 0) {
导致问题,因为查询没有返回成功。那么它如何得到num_rows
呢?
如果你想在运行if语句之前检查MySql错误,那么试试最后的代码,找出错误是什么:
<?php
ini_set('display_errors', 1);
error_reporting(~0);
$servername = "myserver.com";
$username = "myusername";
$password = "mypassword";
$dbname = "mydbname";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT * FROM books";
$result = $conn->query($sql);
if($result !== false){
//query was a success!
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. "<br>";
}
} else {
echo "0 results";
}
}else{
//your query had an error so lets display it:
echo "Query Error: ".$conn->error;
}
$conn->close();
?>
现在打印出来的错误是什么?