Поэтому я пытаюсь научиться использовать подготовленные операторы в своих запросах, в отличие от старого метода 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 вместо? и он возвращает записи, так что я знаю, что запрос правильный, но я не уверен, что я правильно использую подготовленный бит? Может кто-нибудь, пожалуйста, сообщите мне, где я мог пойти не так?
большое спасибо
Вам необходимо присвоить значение $type
прежде чем связать это:
$type = 1;
$stmt->bind_param("i",$type);
$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();
}?>
все заработало 🙂 отсутствовала строка кода, необходимая для выполнения запроса.