Как передать массив с оператором if в запрос MySQL с подготовленным оператором? - PullRequest
0 голосов
/ 07 апреля 2020

Я создаю веб-сайт, на котором есть вакансии, и кто-то может фильтровать вакансии по категориям. Однако кто-то может не всегда фильтровать работу, поэтому он должен зависеть от отмеченных флажков на переднем конце. Как только он попадает в файл PHP, он должен взорвать массив, а затем использовать каждую переменную для параметризации запроса. Я нашел несколько ссылок, которые показали, как сделать подобное приложение, но я не смог найти никакого материала о том, как это сделать, с помощью оператора IF и подготовленного оператора mysqli.

$o = 'o';
$sql="SELECT pid,title,description,location FROM jobs WHERE status=? ORDER BY job_date DESC";

if(isset($_POST['category'])){
    $category_filter = implode("','",$_POST['category']);
    $sql .= " AND category=? IN('".$category_filter."')";
}
$stmt = $conn->prepare($sql);
$stmt->bind_param('ss', $o,$category_filter);
$stmt->execute();
$stmt->bind_result($pid,$title,$description,$location);
$job = '';
while($stmt->fetch()){
    include '../templates/job-listing.php';
        }

1 Ответ

0 голосов
/ 07 апреля 2020

Ваш код почти хорош. Суть в том, что после предложения order by добавляется ограничение "IN ,...", что приводит к синтаксической ошибке. изменить:

$o = 'o';
$sql="SELECT pid,title,description,location FROM jobs WHERE status='" . $o . "' ";

$order_clause = " ORDER BY job_date DESC";

if(isset($_POST['category'])){
    $category_filter = implode("','",$_POST['category']);
    $sql .= " AND category IN('" . $category_filter . "')";
}

$sql .= $order_clause;

$stmt = $conn->prepare($sql);
$stmt->execute();
$stmt->bind_result($pid,$title,$description,$location);

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