#php #sql #mysqli #prepared-statement
#php #sql #mysqli #подготовленный оператор
Вопрос:
Мне нужна помощь в преобразовании этого SQL в подготовленный оператор. Это для моей панели поиска. Я надеюсь, что смогу получить некоторую помощь, поскольку я новичок в этом.
Это мой SQL
$conn = mysqli_connect('localhost','root','','my_db');
$mysql = "SELECT * FROM catetable";
$bike_list = mysqli_query($conn,$mysql);
$catesql = "SELECT catename FROM catetable";
$cate_list = mysqli_query($conn,$catesql);
И это то, что я хотел бы изменить на подготовленный оператор
if (isset($_GET['search']))
{
$search = $_GET['search'];
$searchlist = array();
$lowersearchlist = array();
$i = 0;
while ($one_cate = mysqli_fetch_assoc($cate_list))
{
$searchlist[$i] = $one_cate['catename'];
$lowersearchlist[$i] = strtolower($one_cate['catename']);
$i ;
}
if (in_array($search,$searchlist) || in_array($search,$lowersearchlist))
{
header("Location:feature.php");
}
else
{
header("Location:index.php?error=true");
}
}
Комментарии:
1. Где находится SQL?
2. В этом коде нет ничего для преобразования. Кажется, что часть отсутствует. Откуда
$cate_list
берется?3. @El_Vanja Извините, я обновил вопрос.
4. Поскольку ваши запросы не имеют параметров, на самом деле нет необходимости готовить их, достаточно просто вызвать
query
. Если вы все еще хотите преобразовать, все сводится к вызовуprepare
иexecute
, согласно примеру в ответе.
Ответ №1:
Напишите запрос, который соответствует параметру в WHERE
предложении. MySQL обычно по умолчанию использует сравнения без учета регистра, поэтому вам не нужно извлекать все строки, чтобы сравнить их точно и без учета регистра.
if (isset($_GET['search'])) {
$stmt = $conn->prepare("SELECT COUNT(*) AS c FROM yourTable WHERE catename = ?");
$stmt->bind_param("s", $_GET['search']);
$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_assoc();
if ($row['c'] > 0) {
header("Location: feature.php");
} else {
header("Location: index.php?error=true";
}
}