Я пытаюсь запустить простой запрос mysql в php, но он не запускается. В нем говорится, что B.ISBN и т. д. - это неопределенные индексы. Почему это ? Разве php не распознает AS (что-то) mysql? Я отредактировал, чтобы добавить весь код файла, извините за недоразумение
<?php include 'dbconfig.php'; $Title = $_GET['Title'];?>
<?php header('Content-Type: text/html; charset=utf-8');?>
<!DOCTYPE HTML PUCLIC "-//W3C//DTDHTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<link rel = "stylesheet" type = "text/css" href = "mytable.css">
<link rel = "stylesheet" type = "text/css" href = "styles.css">
</HEAD>
<TABLE class = "minimalistBlack">
<thead>
<tr>
<th> ISBN </th>
<th> Title </th>
<th> Number of Pages </th>
<th> Publisher Name </th>
<th> Copy Number </th>
<th> Shelf </th>
</tr>
</thead>
<?php
$conn= mysqli_connect("localhost","root","","library");
mysqli_set_charset($conn, "utf8");
if ($conn -> connect_error){
die("Conenction failed:". $conn->connect_error);
}
$sql = "SELECT B.ISBN,B.Title,B.numpages,B.pubName,C.copyNr,C.shelf
FROM book AS B
INNER JOIN copies as C
ON B.ISBN=C.ISBN";
$result = $conn->query($sql);
if ($result->num_rows>0){
while($row= $result->fetch_assoc()){
echo "<tr>";
echo "<td>".$row['B.ISBN']."</td>";
echo "<td>".$row['B.Title']."</td>";
echo "<td>".$row['B.numpages']."</td>";
echo "<td>".$row['B.pubName']."</td>";
echo "<td>".$row['C.copyNr']."</td>";
echo "<td>".$row['C.shelf']."</td>";
}
echo "</TABLE>";
}
else { echo "0 result"; }
$conn->close();
?>
</TABLE>
</HTML>
Переменная $Title не определена. (Запрос также не защищен от SQL-инъекций)
@MohitKumar да
@odan Я использовал оператор get в начале файла, поэтому он определен
Попробуйте оставить псевдонимы таблиц в echos. echo "<td>" . $row['ISBN'] . "</td>"; вместо echo "<td>" . $row['B.ISBN'] . "</td>"; и т. д....
@stickybit комментарий года!
@thriteenchess, какой из этих ответов решил вашу проблему. Пожалуйста, примите этот ответ.
@Pie на самом деле комментарий липкого бита решил это с помощью кода из предоставленного ответа, который почти одинаков






Используйте JOIN:
SELECT B.ISBN,B.Title,B.numpages,B.pubName,C.copyNr,C.shelf
FROM book AS B
INNER JOIN copies as C
ON B.ISBN=C.ISBN
WHERE B.Title='$Title'";
а как же заголовок?
Отредактировано, но я нигде не вижу $Title определенного.
Я отредактировал пост, чтобы включить весь код, извините за недоразумение.
Вы можете использовать эту номенклатуру для именования таблиц.
SELECT B.ISBN,B.Title,B.numpages,B.pubName FROM book B JOIN copies C WHERE B.ISBN=C.ISBN AND B.Title = '+$title;
кажется, что это частично работает, однако я получаю эту ошибку: Примечание: попытка получить свойство 'num_rows' не-объекта в C:\wamp\www\search_query.php в строке 31
@thriteenchess Я лично рекомендую вам проверить запрос непосредственно на базе данных. Например, если вы используете phpmyadmin, попробуйте выполнить запрос вручную и отредактируйте его, пока он не заработает. После этого поместите тот же запрос в php-скрипт. Тем самым вы можете подтвердить, что запрос работает. Это дает вам эту ошибку, потому что $result не установлен (запрос неверен).
запрос успешно выполнен в phpmyadmin
затем повторите запрос, сохраненный в $sql, чтобы увидеть, совпадает ли он с тем, который вы указали в phpmyadmin (возможно, это какая-то простая ошибка строки).
Попробуйте следующий запрос:
SELECT B.ISBN,
B.Title,
B.numpages,
B.pubName,
C.copyNr,
C.shelf
FROM book as B
LEFT JOIN copies AS C ON B.ISBN=C.ISBN
WHERE B.Title = '”.$Title.”’”
Вы также можете поменять левое соединение на внутреннее в зависимости от ситуации.
$sql = "SELECT B.ISBN,B.Title,B.numpages,B.pubName,C.copyNr,C.shelf
FROM book AS B
INNER JOIN copies as C
ON B.ISBN=C.ISBN
WHERE B.Title = '".$Title."'";
ваш sql-запрос выдает результат в phpmyadmin?