Я пытаюсь использовать подготовленные команды mysqli с запросом оператора LIKE и подстановочными операторами. После того, как отладка будет разбрызгиваться выражениями echo по всему коду, я вижу, что оператор while while не выполняется. Вы видите, что я здесь делаю неправильно?mysqli_fetch_array(), подготовленный оператор и оператор LIKE
Это мой первый вопрос на этом форуме, поэтому я приношу свои извинения, если это не очень хороший вопрос; Я потратил 6 часов, пытаясь заставить подготовленный раздел инструкций моего кода работать, и я не могу найти нити, затрагивающие мой вопрос, которые не полностью перевернуты над моей головой (например, How can I put the results of a MySQLi prepared statement into an associative array?). Двумя ближайшими мной были:
Using wildcards in prepared statement - MySQLi и Combine PHP prepared statments with LIKE.
Вот соответствующий отрывок из моего кода:
//set up and execute queries
$titleQuery = "SELECT keyframeurl, videoid, title, creationyear, sound, color,
duration, genre FROM openvideo WHERE title LIKE CONCAT ('%', ?, '%')
ORDER BY $order";
if($stmt = mysqli_prepare($db, $titleQuery)){
//bind parameters
mysqli_stmt_bind_param($stmt, 's', $trimmedTitleSearch);
//execute query
mysqli_stmt_execute($stmt);
//bind results
mysqli_stmt_bind_result($stmt, $keyframeurl, $videoid, $title, $year, $sound,
$color, $duration, $genre);
//store result so num rows can be counted
$result = mysqli_stmt_store_result($stmt);
//fetch results
while ($row = mysqli_fetch_array($result, MYSQL_ASSOC)) {
echo "<tr>";
echo "<td><a href=\"".$row['keyframeurl']."\">".$row['videoid']."</a></td>";
echo "<td>" . $row['title'] . "</td>";
echo "<td>" . $row['year'] . "</td>";
echo "<td>" . $row['sound'] . "</td>";
echo "<td>" . $row['color'] . "</td>";
echo "<td>" . $row['duration'] . "</td>";
echo "<td>" . $row['genre'] . "</td>";
echo "</tr>";
}
}
else {
// Error
printf("Prepared Statement Error: %s\n", $db->error);
}
Спасибо за любые советы!
Я использовал MySQLi раньше, но превращение его в массивы было довольно сложной задачей. Если вы только начинаете программу, я предлагаю изучить PDO, поскольку он делает массивы и извлекает информацию намного проще, чем MySQLi. MySQLi_STMT просто ... Неполный, похоже, что он был оставлен на полпути. – Rujikin
«Я вижу, что мой оператор while не выполняет» - любые сообщения об ошибках? – sectus
Да, это не очень хороший вопрос. Просто * смотреть * код не путь. Код должен быть * run * вместо этого. И вы должны разделить свои цели, делая не все сразу. Сначала отсортируйте содержимое с помощью подготовленных инструкций, а затем перейдите к LIKE или к какому-либо другому конкретному запросу. И да - если вы не хотите тратить свое время, [** переходите к PDO **] (http://stackoverflow.com/tags/pdo/info), пока не опоздаете –