2013-03-07 2 views
0

Работа над небольшим университетским проектом по разработке небольшого сайта php. Кажется, у вас есть пара вопросов. Я совершенно новый, когда речь заходит о программировании любого рода. Я грамотно вырезаю и вставляю (из предоставленных скриптов) и пытаюсь собрать все вместе, как мне нужно.PHP, MySQL Запрос не работает

Кажется, у меня проблема с сбором данных из запроса базы данных, у меня уже есть один скрипт, который отлично работает. Я пытаюсь добавить еще один, но, похоже, не может заставить это работать.

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"; 
    ?> 
+0

Проверьте код в своем сообщении. –

ответ

4

Одна из ошибок, которые я видел это использование зарезервированных ключевых слов.

Причина, по которой $d не используется потому, что столбец DESC является зарезервированным ключевым словом от MYSQL. Вы можете delimite его с кавычкой или указать псевдоним на столе, чтобы заставить его работать, например,

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

ИЛИ

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

Как Замечание, запрос является уязвим с SQL Injection, если значение (s) переменных было получено извне. Пожалуйста, ознакомьтесь с приведенной ниже статьей, чтобы узнать, как ее предотвратить. Используя PreparedStatements, вы можете избавиться от использования одинарных кавычек вокруг значений.

+0

Ах, это было бы замечательно. Однако, похоже, я получаю следующее сообщение об ошибке: Ловкая фатальная ошибка: объект класса mysqli_result не может быть преобразован в строку в /volume1/web/phptests/shopping/category.php в строке 19 –

+0

Что находится в строке 19? – Barmar

+0

echo "

". $ Result2. "

"; –

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"; 
    ?> 
+1

Это просто неправильно, 'mysqli_fetch_row' не возвращает 2-мерный массив. – Barmar

+0

Это правда, мой плохой. Я отредактировал свой ответ с помощью команды assoc. –

+0

Теперь ваш ответ уже не прав, но он все еще не является решением. 'mysqli_fetch_array()' отлично работает, как он его использовал. – Barmar

Смежные вопросы