[英]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.