Оператор выбора, использующий подготовленные операторы MySQL, где оператор SQL содержит переменную - PullRequest
0 голосов
/ 07 января 2020

Я хочу использовать подготовленные заявления для предотвращения 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 ?)";
}

Однако, даже если нет поиска, сообщение об ошибке все еще появляется. Я делаю подготовленные операторы неправильно?

ОБНОВЛЕНИЕ:

Кажется, что он может выбрать нужное количество строк, однако я не могу получить результат получен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...