如何在循环中传递变量来执行??? 这里有一个答案的例子......
$placeholders = array_fill(0, count($array), '?');
$keys = $values = array();
foreach($array as $k => $v) {
$keys[] = $k;
$values[] = !empty($v) ? $v : null;
}
$stmt = $mysqli->stmt_init();
$query = 'INSERT INTO `'.DB_TABLE_PAGES.'` '.
'('.implode(',', $keys).') VALUES '.
'('.implode(',', $placeholders).')';
$stmt->prepare($query);
call_user_func_array(
array($stmt, 'bind_param'),
array_merge(
array(str_repeat('s', count($values))),
$values
)
);
$stmt->execute();
但是多个数组怎么样?我想添加db 10000值,但不是每次传递都构建和绑定语句.. 可能吗 ? 所以我想从数组构建语句,绑定params(我不知道如何)。比在循环传递变量(由键标识)并执行...
如果我不为每个表写一个语句(只是创建列名和变量数组),那就是普遍的东西答案 0 :(得分:0)
当使用预处理语句和mysqli时,您需要做的就是更改存储在绑定参数中的值并再次运行execute。这是绑定参数的点,允许多次执行语句而不需要重新发送查询的开销(本质上也是一个很好的安全性,但这不是重点。)
以例如:
$param1 = '';
$param2 = '';
$param3 = '';
$param4 = '';
$query = 'INSERT INTO table VALUES (?, ?, ?, ?)';
$format = 'ssss';
$params = array(&$param1, &$param2, &$param3, &$param4);
$stmt = $mysqli->stmt_init();
$stmt->prepare($query);
$params = array_merge(array($format), $params); #set up format and parameters for binding
call_user_func_array(array($stmt, 'bind_param'), $params); #parameters specified so bind them
foreach($data as $data_point){
$param1 = $data_point[0];
$param2 = $data_point[1];
$param3 = $data_point[2];
$param4 = $data_point[3];
$stmt->execute();
}
这将准备你的语句,然后遍历存储在$ data中的数据,获取每个值,将其放入准备好的参数中,然后使用新参数执行语句。
此特定代码的里程会有所不同,因为它不会对sql错误语句进行任何检查,而且对于许多应用程序,在一个插入中执行多行可能效率更高。