#php #mysql #mysqli #prepared-statement
#php #mysql #mysqli #подготовленный оператор
Вопрос:
Я пишу подготовленный оператор PHP с использованием подготовленных операторов MySQLi, где первым связанным параметром является идентификатор пользователя, а вторым параметром может быть один из 5 различных фрагментов кода SQL (переменная $ redeemLimitCheckRange) на основе других условий, представленных в виде строки. У меня возникли проблемы с привязкой второго параметра.
Я пробовал связывать код SQL в виде строки, пробовал использовать функцию SQL CONCAT(), но, похоже, ни то, ни другое не работает.
<?php
if($dbRedeemStart != '' amp;amp; $dbRedeemEnd != ''){
$redeemLimitCheckRange = "AND DATE(chg_date) >='$dbRedeemStart' AND DATE(chg_date) <= '$dbRedeemEnd'";
else if($dbRedeemStart != '' amp;amp; $dbRedeemEnd == ''){
$redeemLimitCheckRange = "AND DATE(chg_date) >= '$dbRedeemStart'";
else if($dbRedeemStart == '' amp;amp; $dbRedeemEnd != ''){
$redeemLimitCheckRange = "AND DATE(chg_date) <= '$dbRedeemEnd'";
}else{
$redeemLimitCheckRange = "";
}
$sql = "SELECT COUNT(recId) totalRedeem FROM transactions WHERE userId = ? AND `type` = 'Redeemed' ?";
$stmt = mysqli_stmt_init($connection);
if(!mysqli_stmt_prepare($stmt, $sql)){
error_log("mysqli_stmt_prepare failure", 0);
}else{
mysqli_stmt_bind_param($stmt, "is", $usrId, $redeemLimitCheckRange);
mysqli_stmt_execute($stmt);
$rslt = mysqli_stmt_get_result($stmt);
mysqli_stmt_close($stmt);
}
?>
В настоящее время php выдает ошибку в строке mysqli_stmt_prepare($stmt, $sql) и выдает ошибку.
Комментарии:
1. нет, вы не можете этого сделать, объедините
$redeemLimitCheckRange
строку с$sql
укусом2. Не переносите chg_date в
DATE()
функцию. Предполагая, что это тип SQL даты, просто оставьте его как таковой.3. @tim спасибо. Почему это не разрешено с подготовленными операторами?
4. параметры привязаны, а не большие фрагменты запроса
$sql = "SELECT COUNT(recId) totalRedeem FROM transactions WHERE userId = ? AND
типа` = ‘Redeemed’ «.$redeemLimitCheckRange;` затем исправьте параметр bind_param, поскольку у вас есть только один