簡體   English   中英

動態准備語句(綁定參數錯誤)

[英]Dynamic prepared statement (bind param error)

我試圖將參數添加到我准備好的語句中,查詢和數組看起來正確。 但是會觸發“類型定義字符串中的元素數量與綁定變量的數量不匹配”錯誤。

$sql = 'SELECT * FROM `feed` ';
$types = array();
$params = array();

if( isset($_GET['p']) ) {
  $page = $_GET['p'];
}
else {
  $page = 0;
}

if( isset($_GET['q']) ) {
  $sql .= 'WHERE `title` LIKE ? ';
  $search = $_GET['q'];
  array_push($types, 's');
  array_push($params, $search);
}

$sql .= 'ORDER BY `time` DESC LIMIT ?, 6';

array_push($types, 'i');
array_push($params, $page);

$stmt = $mysqli->prepare($sql);
$params = array_merge($types, $params);

$refs = array();
foreach($params as $key => $value)
  $refs[$key] = &$params[$key];

call_user_func_array(array($stmt, 'bind_param'), $refs);

(從服務器打印)

查詢:SELECT * FROM feed WHERE title喜歡嗎? time排序DESC LIMIT?,6

數組合並:

Array
(
    [0] => s
    [1] => i
    [2] => word
    [3] => 0
)

謝謝。

我的理解是,第一個參數'types'是參數類型的字符串 ,而不是數組。 因此該示例的參數列表應如下所示:

Array
(
    [0] => si
    [1] => word
    [2] => 0
)

這是未經測試的代碼:但是爆破應該執行'$ types'數組中我們想要的操作

$strTypes = implode('', $types);

我待會再檢查。

暫無
暫無

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

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