现在,我需要使用以下结构来将多个参数绑定到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 .= "?,"; } }
我的问题是,肯定有一种方法可以动态处理查询中尽可能多的输入。硬编码bind_param()似乎是处理此问题的一种非常糟糕的方法。
bind_param()
我正在使用PHP版本5.4.10
不幸的是,默认情况下,bind_param()不接受数组而不是单独的变量。但是,自PHP 5.6起,将进行重大改进。
要将任意数量的变量绑定到mysqli查询中,您将需要一个参数解包运算符。这将使操作尽可能简单和流畅。
例如,要将PHP数组与mysql的IN()运算符一起使用,您将需要以下代码
IN()
// our array $words = ['a','b','c']; // create an SQL query with placeholders and prepare it $in = str_repeat('?,', count($array) - 1) . '?'; // returns ?,?,?... $sql = "SELECT name FROM table WHERE city IN ($in)"; $stmt = $mysqli->prepare($sql); // create the types string dynamically and bind an array $types = str_repeat('s', count($array)); // returns sss... $stmt->bind_param($types, ...$array); // execute and fetch the rows $stmt->execute(); $result = $stmt->get_result(); // get the mysqli result $data = $result->fetch_all(MYSQLI_ASSOC); // fetch the data