php - 在 PHP 和 SQL 中查看产品时遇到问题

标签 php mysql sql database online-store

我想制作一个自动表格显示数据库中的所有产品,您可以在其中单击其名称并查看产品的全部详细信息。我的想法是,它不会将您带到另一个 .php 文件,而是您仍然位于同一页面上,这样您就不会浪费时间为每个产品创建多个 .php 文件。 问题是,每当我点击产品时,它都不会加载产品的信息(顺便说一下,唯一的细节是描述)。

错误
fatal error :无法在第 56 行 C:\wamp\www\goldenrod\index.php 中使用 mysqli_result 类型的对象作为数组

这是数据库连接:

<?php
//Database Connections
$dbc = mysqli_connect('localhost', 'root', '', 'lionsierra_db') or die("Cannot find specified server");

//Product Database
$db_products = "SELECT * FROM `products`";
$products = mysqli_query($dbc, $db_products);
?>

这是函数:

<?php
//View product
if(isset($_GET['view_product'])) {
    while($product=mysqli_fetch_assoc($products)) {
    $products['ID'] = $_GET['view_product'];
    //Display a product
    echo "<p><span>
        <span style='font-weight:bold;'>" . $products['ID']['name'] . "</span><br/>
        <span>$" . $products['ID']['price'] . "</span><br/>
        <span>" . $products['ID']['category'] . "</span><br/>
        <span>" . $products['ID']['description'] . "</span>
    </p>";
    }
}
//View all products
echo '<table width="600" border="1" cellpadding="1" cellspacing="1">
    <tr>
        <th>Name</th>
        <th>Price</th>
        <th>Category</th>
    </tr>';
    while($product=mysqli_fetch_assoc($products)) {
        echo "<tr>
            <td><a href='./index.php?view_product=" . $product['ID'] . "'>". $product['name'] . "</a></td>
            <td>" . $product['price'] . "</td>
            <td>" . $product['category'] . "</td>
        </tr>";
        $ID = $product['ID'];
    }
?>

我对 PHP 和 SQL 还很陌生,如果你们能帮助我,我将不胜感激。

最佳答案

问题出在这里:

 if(isset($_GET['view_product'])) {
     while($product=mysqli_fetch_assoc($products)) {

看起来您只是在此处重新使用 MySQLI 查询。相反,您应该根据 productID 更改查询。让我们看看它是什么样子的:

if(isset($_GET['view_product'])) {
    //now let's build out our query
    $view_product_statement = mysqli_prepare($conn, "SELECT * FROM products WHERE ID = ?");
    mysqli_stmt_bind_param($view_product_statement, 'i', $_GET['view_product']);
    mysqli_stmt_execute($view_product_statement);
    mysqli_stmt_bind_result($view_product_statement);

    while($product=mysqli_fetch_assoc($view_product_statement)){
        //now $product holds reference to the one we're trying to view.
    } 
    mysqli_stmt_close($view_product_statement);
}

我在上面使用了准备好的语句来帮助清理您的用户输入,从而帮助您避免SQL注入(inject)

关于php - 在 PHP 和 SQL 中查看产品时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34558823/

相关文章:

SQL 服务器 : combine only dates with no reference

c# - 转换压缩 COBOL

php - 在 tinymce 编辑器中显示时将 css 应用于文本

php: dom 用另一个 dom 的根节点替换节点

php - 注册符号害死我了

MySQL合并两列

javascript - 我如何定位 select 语句选项以在另一个页面中显示某个 div

php - 设置 MySQL 数据库以用于搜索功能

mysql - 在查询脚本中的后续查询中使用多行响应

php - 使用 group by 函数对多列进行 sum()