Я хочу использовать подготовленные заявления для предотвращения SQL инъекций. Однако мое подготовленное заявление не выполняется. Я думаю, потому что я получил сообщение об ошибке.
$sql = "SELECT user.username, posted, title, context, tags.name AS sport, image FROM post, user, tags WHERE post.user = user.id AND post.tag = tags.id $extra ORDER BY posted $order;";
echo $sql;
$stmt = $conn -> prepare($sql);
if (isset($_POST["search"])) {
$stmt->bind_param("ss", $search, $search);
}
$stmt->execute();
$stmt->bind_result($username, $posted, $title, $context, $name);
if (!$stmt->errno) {
// Handle error here
echo "An error has occured. Please try again.";
};
while ($stmt->fetch()) {
echo "<article>";
echo "<h1><span>$title</span><span class=\"tags\">$sport</span></h1>";
echo "<figure><img src=\"$image\"></figure>";
echo "<p>$context</p>";
echo "<p class=\"publisher\">Published $posted by @$username</p>";
echo "</article>";
}
$ extra это код:
if (isset($_POST["search"])) {
$search = "%{$_POST['search']}%";
$extra ="AND (context LIKE ? OR username LIKE ?)";
}
Однако, даже если нет поиска, сообщение об ошибке все еще появляется. Я делаю подготовленные операторы неправильно?
ОБНОВЛЕНИЕ:
Кажется, что он может выбрать нужное количество строк, однако я не могу получить результат получен.