Как мне преобразовать этот SQL в подготовленный оператор?

#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";
    }
}