dongmeirang4679 2019-04-17 02:37
浏览 89

使用PHP MySQLi准备语句进行动态SQL连接

I am writing a PHP prepared statement using MySQLi prepared statements where the first bound parameter is a user's ID and the second parameter can be one of 5 different pieces of SQL code (the $redeemLimitCheckRange variable) based on other conditions represented as a string. I am having trouble binding the second parameter.

I have tried binding the SQL code as a string, have tried using the SQL CONCAT() function, but neither seem to work.

<?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);
    }
?>

Currently, php is failing on the mysqli_stmt_prepare($stmt, $sql) line and throwing an error.

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥60 版本过低apk如何修改可以兼容新的安卓系统
    • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
    • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
    • ¥50 有数据,怎么用matlab求全要素生产率
    • ¥15 TI的insta-spin例程
    • ¥15 完成下列问题完成下列问题
    • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
    • ¥15 YoloV5 第三方库的版本对照问题
    • ¥15 请完成下列相关问题!
    • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?