我有一个简单的PHP脚本,它执行两次简单的SQL查询。查询适用于第一个,但第二次出现错误;
注意:尝试在第48行的C:\ apache \ localhost \ www \ study.kg \ webstore \ web_store.php中获取非对象的属性
致命错误:在第80行的C:\ apache \ localhost \ www \ study.kg \ webstore \ web_store.php中的非对象上调用成员函数free()
首先,我们对'categories'表进行查询。一切都是好的。 其次,我们对'shoes'表进行相同的查询。一切都很糟糕,因为
$query = "SELECT * FROM shoes";
$result = $db->query($query);
返回FALSE
值。
但为什么呢?第一个完美的工作。这些表是相同的,如果你的意思是编码等等。所以,你可以猜到,我的第一个表显示自己完美,第二个表根本不显示任何数据。 这是一个完整的片段。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Лабораторная: интернет-магазин обуви</title>
</head>
<body>
<?php
@$db = new mysqli('localhost', 'dzhakipov', 'asd12345', 'webshop');
if (mysqli_connect_errno()) {
echo 'Error: could not connect to database. Please try again later.';
exit;
}
$query = "SELECT * FROM categories";
$result = $db->query($query);
$num_results = $result->num_rows;
?>
<table>
<tr>
<td>id</td>
<td>Название</td>
<td>Описание</td>
<td>Поставщик</td>
<td>Продавец</td>
<td>Адрес склада</td>
</tr>
<?php
for ($i = 0; $i < $num_results; $i++) {
$row = $result->fetch_assoc();
echo "<tr>";
echo "<td>" .stripslashes($row['id']). "</td>";
echo "<td>" .htmlspecialchars(stripslashes($row['name'])). "</td>";
echo "<td>" .stripslashes($row['description']). "</td>";
echo "<td>" .stripslashes($row['supplier']). "</td>";
echo "<td>" .stripslashes($row['salesman']). "</td>";
echo "<td>" .stripslashes($row['storage_address']). "</td>";
echo "</tr>";
}
echo "</table>";
$query = "SELECT * FROM shoes";
$result = $db->query($query);
$num_results = $result->num_rows; // LINE 48 #############################
?>
<table>
<tr>
<td>id</td>
<td>categoryid</td>
<td>Название</td>
<td>Пол</td>
<td>Размер</td>
<td>Сезон</td>
<td>Внешний материал</td>
<td>Внутренний материал</td>
<td>Цвет</td>
<td>Описание</td>
</tr>
<?php
for ($i = 0; $i < $num_results; $i++) {
$row = $result->fetch_assoc();
echo "<tr>";
echo "<td>" .stripslashes($row['id']). "</td>";
echo "<td>" .stripslashes($row['categoryid']). "</td>";
echo "<td>" .htmlspecialchars(stripslashes($row['name'])). "</td>";
echo "<td>" .stripslashes($row['sex']). "</td>";
echo "<td>" .stripslashes($row['size']). "</td>";
echo "<td>" .stripslashes($row['season']). "</td>";
echo "<td>" .stripslashes($row['inner_material']). "</td>";
echo "<td>" .stripslashes($row['outer_material']). "</td>";
echo "<td>" .stripslashes($row['colour']). "</td>";
echo "<td>" .stripslashes($row['price']). "</td>";
echo "</tr>";
}
echo "</table>";
$result->free(); // LINE 80 #############################
$db->close();
?>
</body>
</html>
感谢您的关注。
答案 0 :(得分:0)
在第二次使用结果之前,请先查看此http://php.net/manual/en/function.mysql-free-result.php。
您还可以将第二个$ result更改为$ result2以使其正常工作。
答案 1 :(得分:0)
在尝试查询第二个
之前,我尝试释放第一个结果$result->free();
$query = "SELECT * FROM shoes";
$result = $db->query($query);
其次,虽然我不熟悉mysqli(这里是大PDO粉丝),但我认为false可能是查询的可能结果,所以你应该将结果遍历在if块中。
if($result) {
$num_results = $result->num_rows;
...
$result->free();
}
答案 2 :(得分:0)
当您将MySQL查询作为String存储在$ Query变量中时,现在要让php执行此查询,您需要使用将从DB检索数据的mysqli_query()