Php 为mysqli prep语句使用数组/字符串
我遇到了一个与mysqli准备的声明有关的问题。这可能是新手犯的错误;我对这样的事情不太熟悉。感谢您的帮助 我有两个数组,Php 为mysqli prep语句使用数组/字符串,php,mysql,mysqli,Php,Mysql,Mysqli,我遇到了一个与mysqli准备的声明有关的问题。这可能是新手犯的错误;我对这样的事情不太熟悉。感谢您的帮助 我有两个数组,$alpha[]和$bravo[]。两者都有20对,但为了简化: $alpha = array('name', 'age', 'color'); $bravo = array( 'name' => 'John Doe', 'age' => 22, 'color' => 'blue', ); 我想通过使用$alpha[]定义列标
$alpha[]
和$bravo[]
。两者都有20对,但为了简化:
$alpha = array('name', 'age', 'color');
$bravo = array(
'name' => 'John Doe',
'age' => 22,
'color' => 'blue',
);
我想通过使用$alpha[]
定义列标题,然后将$bravo[]
中的数据绑定到查询,然后执行查询,从而将$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
}
}
这对我不起作用-非常感谢你们提供的任何帮助或见解(包括实现我想做的事情的其他方法)
将绑定参数更改为
$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()函数源:虽然这确实实现了我的目标,但这并不是我想要的。有没有办法仅仅将整个数组中的所有值放在其中,而不是写出所有20多个引用?我使用call\u user\u func\u数组来完成这一点。注意,根据php版本的不同,它需要稍微不同的处理。再见,谢谢。我将你的答案标记为正确答案,并将编辑你的帖子,以反映评论中的其他信息。