簡體   English   中英

動態mysqli准備語句

[英]Dynamic mysqli prepared statement

我需要幫助為動態mysqli准備的語句創建方法。 下面的代碼有錯誤。 我知道我完全不贊成設置mysqli_stmt_bind_param的方式,但是我找不到解決方案。 由於我使用的是OO php,所以我的編碼風格可能很奇怪,但是過程mysqli。 自從我閱讀/觀看的書籍和視頻使用程序化mysqli以來,我還沒有時間弄清楚OO mysqli。 我針對該問題看到的大多數解決方案都使用OO mysqli。 我寧願為此獲得短期修復,而不是在花了很多時間學習mysqli之后不得不學習PDO。

public function create($sql, $param_type, $param){
    //param_type should be set as $param_type = "'ssss'" so that single quotes get passed into the variable
    //param should be an array
    //param array items should be escaped
    $stmt = mysqli_prepare($this->dbc, $sql);
    mysqli_stmt_bind_param($stmt, $param_type, join(array_values($param), ", "));
    $result = mysqli_stmt_execute($stmt);

    if($result){
        return true;
    } else{
        return false;
    }
    mysqli_stmt_close($stmt);
}

使用OO mysqli很簡單:

  1. 將每個mysqli_blah($this->dbc)調用更改$this->dbc->blah()
  2. 將每個mysqli_stmt_blah($stmt)調用更改為$stmt->blah()
  3. 利潤!

另外,請始終檢查prepare()execute()的返回值。 當解析或執行中存在錯誤時,它們將返回false,您需要每次檢查並報告錯誤。

mysqli_stmt_bind_param()函數很棘手,因為它期望可變數量的參數,param類型參數中的每個字母一個, 而不是逗號分隔的字符串。 另外,它要求您按引用傳遞變量,而不是標量,而不是單個數組。

  • 錯誤: mysqli_stmt_bind_param($stmt, "sss", "red,green,blue");

  • 錯誤: mysqli_stmt_bind_param($stmt, "sss", "red", "green", "blue");

  • 錯誤: mysqli_stmt_bind_param($stmt, "sss", $param_array);

  • 右: mysqli_stmt_bind_param($stmt, "sss", $param1, $param2, $param3);

這使您難以做事情:編寫一個通用函數來准備和執行帶有動態數量參數的SQL語句。 您必須使用call_user_func_array()但必須將參數數組重寫為引用數組。

我在過去的幾個答案中都寫了一些示例:

PDO更輕松地解決了這個問題,您無需綁定任何內容,只需將一個數組傳遞給execute()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM