0

在一个小型大学项目上工作以开发一个小型 php 站点。似乎有几个问题。在任何类型的编程方面,我都是一个全新的人。我在字面上剪切和粘贴(从提供的脚本)并试图以我需要的方式将事物组合在一起。

我似乎在从数据库查询中收集数据时遇到问题,我已经在脚本上有一个可以完美运行的脚本。我正在尝试添加另一个,但似乎无法使其正常工作。

http://mkiddr.com/phptests/shopping/category.php?id=2

目前 category.php 正在显示该类别中的所有产品。但是我希望它也显示类别描述,您将在下面的代码中看到我是如何尝试这样做的:

 <?php
session_start();
include "conn.php";
include "header.php";

if (isset($_GET['id'])){
    $CategoryID = $_GET['id'];
    $q="SELECT ProductID, ProductName FROM Products WHERE CategoryID=$CategoryID";
    $d="SELECT Desc FROM ProductCategories WHERE CategoryID=$CategoryID";

    $result = mysqli_query($_SESSION['conn'],$q);

    $result2 = mysqli_query($_SESSION['conn'],$d);

    echo "<div>";
    while ($row = mysqli_fetch_row($result)){
        echo "<p><a href='product.php?id=".$row[0]."'>".$row[1]."</a></p>";
    }
    echo "<p>".$result2."</p>";
    echo "</div>";
    mysqli_free_result($result);
}
include "footer.php";
?>

将不胜感激一些帮助!

更新的代码(仍然无法正常工作)

   <?php
   session_start();
   include "conn.php";
   include "header.php";

 if (isset($_GET['id'])){
$CategoryID = $_GET['id'];
$q="SELECT ProductID, ProductName FROM Products WHERE CategoryID=$CategoryID";
$d="SELECT `Desc` FROM ProductCategories WHERE CategoryID=$CategoryID";

$result = mysqli_query($_SESSION['conn'],$q);
$result2 = mysqli_query($_SESSION['conn'],$d);  

echo "<div>";
while ($row = mysqli_fetch_row($result)){
    echo "<p><a href='product.php?id=".$row[0]."'>".$row[1]."</a></p>";
}
echo "</div>";
mysqli_free_result($result);

//Description
echo "<div>";
while ($result2 = mysqli_fetch_assoc($result2)){
    echo "<p>".$result2[0]."</p>";
   }

   }
  include "footer.php";
  ?>
4

2 回答 2

4

我见过的错误之一是使用保留关键字。

不执行的原因$d是因为 columnDESCMYSQL. 您可以用反引号分隔它或在表格上提供别名以使其工作,例如

$d="SELECT `Desc` FROM ProductCategories WHERE CategoryID=$CategoryID";

或者

$d="SELECT a.Desc FROM ProductCategories a WHERE CategoryID=$CategoryID";

作为旁注,SQL Injection如果变量的值(s)来自外部,则查询很容易受到攻击。请看下面的文章,了解如何预防。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。

于 2013-03-07T16:39:47.770 回答
1

首先记住将查询提取到数组中:

$result2 = mysqli_fetch_assoc($result2);

由于查询保存到关联数组中,您应该以这种方式调用它 $result2['Desc']

<?php
   session_start();
   include "conn.php";
   include "header.php";

 if (isset($_GET['id'])){
$CategoryID = $_GET['id'];
$q="SELECT ProductID, ProductName FROM Products WHERE CategoryID=$CategoryID";
$d="SELECT `Desc` FROM ProductCategories WHERE CategoryID=$CategoryID";

$result = mysqli_query($_SESSION['conn'],$q);
$result2 = mysql_fetch_assoc( mysqli_query($_SESSION['conn'],$d) );  

echo "<div>";
while ($row = mysqli_fetch_row($result)){
    echo "<p><a href='product.php?id=".$row[0]."'>".$row[1]."</a></p>";
}
echo "</div>";
mysqli_free_result($result);

//Description
echo "<div>";
          echo "<p>".$result2['Desc']."</p>";
echo "</div>";

   }
  include "footer.php";
  ?>
于 2013-03-07T16:44:29.120 回答