我在准备好的语句中很新,但据我所知,我需要动态绑定参数,但它不能像我这样做,首先我检查多少“?”我在准备声明中需要这样做(它可以带有5种不同的变体):
if(strlen($champion_skirtukai) == 1) $int_str_arrangement = "iis";
if(strlen($champion_skirtukai) == 2) $int_str_arrangement = "iiis";
if(strlen($champion_skirtukai) == 3) $int_str_arrangement = "iiiis";
if(strlen($champion_skirtukai) == 4) $int_str_arrangement = "iiiiis";
if(strlen($champion_skirtukai) == 5) $int_str_arrangement = "iiiiiis";
接下来,我生成了一部分sql:
$filter_champ_arr = str_split($champion_skirtukai);
$sql_string = "";
$num_champ_arr = 0;
$this_var_is_for_bind_param = "";
foreach ($filter_champ_arr as &$value)
{
if($num_champ_arr == 0) $sql_string .= "AND LENGTH(champion) - LENGTH(REPLACE(champion, '$', '')) =? ";
else $sql_string .= "OR LENGTH(champion) - LENGTH(REPLACE(champion, '$', '')) =? ";
$num_champ_arr++;
$this_var_is_for_bind_param .= "$value,";
}
$this_var_is_for_bind_param = substr($this_var_is_for_bind_param, 0, -1);
最后我做了所有的准备声明:
$stmt = mysqli_prepare($db_conx, $sql);
mysqli_stmt_bind_param($stmt, $int_str_arrangement, $_POST['filter_by_date'], $this_var_is_for_bind_param, $_POST['filter_by_arrangement']);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $single_id, $single_title, $single_description, $single_champion);
mysqli_stmt_close($stmt);
所以如果我的$ champion_skirtukai =“134”(可能性之一),那么我会得到以下值:
$ int_str_arrangement =“iiiis”
$ this_var_is_for_bind_param =“1,3,4”
然后我会收到错误:
警告:mysqli_stmt_bind_param():类型定义字符串中的元素数与第42行中的绑定变量数不匹配
第42行看起来像这样:
mysqli_stmt_bind_param($stmt, $int_str_arrangement, $_POST['filter_by_date'], $this_var_is_for_bind_param, $_POST['filter_by_arrangement']);
那我应该怎么处理呢?如果$ champion_skirtukai = 1 ...
的长度,一切正常