Пытаюсь изучить подготовленные PHP SQL-операторы, но я делаю что-то не так, но я не уверен, что?

Поэтому я пытаюсь научиться использовать подготовленные операторы в своих запросах, в отличие от старого метода mysql, но мне не очень везет.

Это мой код

<?php
$stmt = $db->stmt_init();

if($stmt->prepare("SELECT l.listingID, l.title, l.description, l.dateListed
FROM tbl_listings AS l
LEFT JOIN tbl_listing_type AS lt ON lt.listingID = l.listingID
LEFT JOIN tbl_type AS t ON t.typeID = lt.typeID
WHERE lt.typeID =?"))
{
$stmt->bind_param("i",$type);
$type = 1;
$stmt->bind_result($id, $title, $description, $date);

while($stmt->fetch())
{
echo $id . ' - ' . $title . ' - ' . $description . ' - '.$date."<br />";
}
$stmt->close();
}
else
{
echo "error";
}

но это ничего не печатает, я запустил запрос в моем phpmyadmin с 1 вместо? и он возвращает записи, так что я знаю, что запрос правильный, но я не уверен, что я правильно использую подготовленный бит? Может кто-нибудь, пожалуйста, сообщите мне, где я мог пойти не так?

большое спасибо

2

Решение

Вам необходимо присвоить значение $type прежде чем связать это:

$type = 1;
$stmt->bind_param("i",$type);
1

Другие решения

$stmt = $db->stmt_init();

if($stmt->prepare("SELECT l.listingID, l.title, l.description, l.dateListed
FROM tbl_listings AS l
LEFT JOIN tbl_listing_type AS lt ON lt.listingID = l.listingID
LEFT JOIN tbl_type AS t ON t.typeID = lt.typeID
WHERE lt.typeID =?"))
{
$type = 1;
$stmt->bind_param("i",$type);
$stmt->execute(); <-- Was missing this in my original code
$stmt->bind_result($id, $title, $description, $date);

while($stmt->fetch())
{
echo $id . ' - ' . $title . ' - ' . $description . ' - '. $date . "<br />";
}
$stmt->close();
}?>

все заработало 🙂 отсутствовала строка кода, необходимая для выполнения запроса.

1

По вопросам рекламы [email protected]