Я создаю систему базы данных песен и пытаюсь реализовать способ поиска пользователями песен по категории для поиска (название песни, имя исполнителя, название альбома, жанр и т. Д.) И заданный поисковый термин , Чтобы приспособить пользовательский ввод и защитить от внедрения SQL, я использую подготовленный оператор, сделанный с переменными связывания, однако у меня возникают проблемы с тем, что я сделал в настоящее время:
search("genre", "electropop", $db);
function search($column, $term, $db) {
try {
$sql = "SELECT * FROM Songs WHERE :column=:term;";
$stmt = $db->prepare($sql);
$params = array("column" => $column,
"term" => $term);
$stmt->execute($params);
$arr = $stmt->fetchALL(PDO::FETCH_ASSOC);
print (json_encode($arr));
}
catch(PDOException $ex) {
catch_error("The search failed.", $ex);
}
}
Всякий раз, когда я проверяю это, я получаю пустой массив: [ ]
Я проверил свой запрос ("SELECT * FROM Songs WHERE genre = 'electropop'") в phpmyadmin, и он проверил (вернул мне записи).
Правильный синтаксис для предложений WHERE в SQL заключается в том, что термин должен быть заключен в кавычки (https://www.w3schools.com/sql/sql_where.asp), поэтому я попытался экранировать кавычки вокруг термина:
...
$sql = "SELECT * FROM Songs WHERE :column=\':term;\'";
...
Но тогда он даже не видит: term как маркер для привязки переменных к более позднему.
Не уверен, как решить эту проблему. Я предположил, что пустой массив связан с правильным поиском, но просто без результатов, но, возможно, я не правильно использую подготовленный оператор. Любая помощь приветствуется! Спасибо!