我遇到了mysqli准备好的声明问题。这可能是一些菜鸟错误;我对这样的事情不太熟悉。任何帮助表示赞赏。
我有两个数组,$alpha[]
和$bravo[]
。两者都有20对,但为了简化:
$alpha = array('name', 'age', 'color');
$bravo = array(
'name' => 'John Doe',
'age' => 22,
'color' => 'blue',
);
我想通过使用$bravo[]
定义列标题然后将$alpha[]
中的数据绑定到查询,然后执行查询,将$bravo[]
中的数据插入到我的表中。这是我想要做的一个例子:
$columns = implode(',', $alpha);
$query_values = '?,?,?';
$query = "INSERT INTO table ($columns) VALUES ($query_values)";
$type = 'sis';
$real_values = implode(',', $bravo);
if($stmt = $mysqli->prepare($query)){
$stmt->bind_param($type, $real_values);
if($stmt->execute()){
// success
}
}
这对我不起作用 - 我们非常感谢你们提供的任何帮助或见解(包括其他方式来完成我想做的事)。
答案 0 :(得分:1)
将bind_param更改为
$stmt->bind_param($type, $bravo[0], $bravo[1], $bravo[2]);
虽然上述方法有效,但它并不是完美的解决方案,因为每次要添加/删除列数据时都需要更改mysqli_bind_param
的参数。
这是解决方案,在适当的工作流程示例中:
// returns an array of associative values
function ref_array_keys($arr) {
$refs = array();
foreach ($arr as $key => $value)
{
$refs[$key] = &$arr[$key];
}
return $refs;
}
$data = array('name' => 'John Doe', 'email' => 'user@domain.com', 'color' => 'red');
$type = 'sss';
$cols = implode(',', array_keys($data));
$vals = implode(',', array_fill(0, count($data), '?'));
$query = "INSERT INTO table_name ($cols) VALUES ($vals)";
if ($stmt = new mysqli($query))
{
call_user_func_array(array($stmt, "bind_param"), array_merge(array($type), ref_array_keys($data)));
}
ref_array_keys()函数来源:https://stackoverflow.com/questions/3681262/...