查询不能通过PHP脚本工作

时间:2013-12-15 23:16:32

标签: php mysql sql

我有一个简单的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>

感谢您的关注。

3 个答案:

答案 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()