将多个参数绑定到mysqli查询中
现在我不得不使用下面的结构来处理将多个参数绑定到一个mysqli查询:
if ($words_total == 1) { $statement -> bind_param("s", $words[0]); } else if ($words_total == 2) { $statement -> bind_param("ss", $words[0], $words[1]); } else if ($words_total == 3) { $statement -> bind_param("sss", $words[0], $words[1], $words[2]); } //and so on....
我使用下面的代码来计算问号的数量,并将其插入到我的查询中:
$marks = ""; for($i = 1; $i<=$words_total; $i++) { if ($i == $words_total) { $marks .= "?"; } else { $marks .= "?,"; } }
我的问题肯定是必须有一种方法来处理查询所需的dynamicinput。 对bind_param()进行硬编码似乎是处理这个问题的一个非常糟糕的方法。
我正在使用PHP版本5.4.10
这里解决scheme或实际问题绑定到mysqli准备语句的可变数量的值:
<?php $values = array('b','c','d'); $in = str_repeat("?,", count($values)); $in = trim($in, ","); $sql = "SELECT * from users where username in($in)"; $stm = $con->prepare($sql); $types = str_repeat("s", count($values)); if (strnatcmp(phpversion(),'5.3') >= 0) { $bind = array(); foreach($values as $key => $val) { $bind[$key] = &$values[$key]; } } else { $bind = $values; } array_unshift($bind, $types); call_user_func_array(array($stm, 'bind_param'), $bind); #var_dump($sql, $types, $bind, $con->error); $stm->execute(); $res = $stm->get_result(); while($row = $res->fetch_assoc()) var_dump($row);
注释行仅用于开发testing。 非常有用。
但是你最初的问题是缺乏错误报告。
它不仅在这个特定的情况下,而且你的整个PHP体验。
每次出现问题时,PHP都会告诉你 – 发生了什么事,谁责怪。 只有你让它。 而你总是应该的。
您可以阅读错误报告基础知识的答案
虽然有错误信息,你可以简单的谷歌,并在几秒钟内find解决scheme。 或者至less你会知道,你有什么问题。 这实际上是call_user_func_array()
函数的行为,突然改变了。