PHP动态绑定mysqli_stmt_bind_param

时间:2015-02-16 11:29:11

标签: php prepared-statement

我在准备好的语句中很新,但据我所知,我需要动态绑定参数,但它不能像我这样做,首先我检查多少“?”我在准备声明中需要这样做(它可以带有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 ...

的长度,一切正常

0 个答案:

没有答案