Динамическая конкатенация SQL с подготовленными заявлениями PHP MySQLi - PullRequest
0 голосов
/ 17 апреля 2019

Я пишу подготовленный оператор PHP, используя подготовленные операторы MySQLi, где первый связанный параметр является идентификатором пользователя, а второй параметр может быть одним из 5 различных фрагментов кода SQL (на основе переменной $ redeemLimitCheckRange ) на других условиях представлены в виде строки. У меня проблемы с привязкой второго параметра.

Я пытался связать код SQL как строку, пытался использовать функцию SQL CONCAT (), но ни одна из них не работает.

<?php
    if($dbRedeemStart != '' && $dbRedeemEnd != ''){
        $redeemLimitCheckRange = "AND DATE(chg_date) >='$dbRedeemStart' AND DATE(chg_date) <= '$dbRedeemEnd'";
    else if($dbRedeemStart != '' && $dbRedeemEnd == ''){                                                                                                                      
        $redeemLimitCheckRange = "AND DATE(chg_date) >= '$dbRedeemStart'";
    else if($dbRedeemStart == '' && $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) и выдает ошибку.

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