Php mysqli_stmt_bind_param试图以字符串形式传递混合变量 foreach($data\u可接受为$key=>$value) { 如果($key!='submit'&&$value!='submit') { $fields_array[]=$key; $values\u数组[]=$value; $placeholder_type.=“s”; $placeholder_num.=“?,”; $complete_array_info.='$data_acceptable'.“['.''.$key.'],”; } } //从数组生成字符串 $fields=内爆(“,”,$fields\u数组); //在列名周围添加“”,示例='user\u name' $values=“”。内爆(“,”,$values_数组)。“”; //删除最后一个,示例=?,?,? $placeholder\u num=substr($placeholder\u num,0,-1); $complete\u array\u info=substr($complete\u array\u info,0,-2); echo$complete_array_info.“”;/输出:$data_acceptable['email'],$data_acceptable['user_name'],$data_acceptable['password'] echo$placeholder_type.“”;//输出:sss $query=“插入到用户(“.$fields”)值(“.$placeholder_num”)”; echo$query; 回显“.”$values.“”; $stmt=mysqli_prepare($dbc,$query); mysqli_stmt_bind_param($stmt,$placeholder_type,$complete_array_info); mysqli_stmt_execute($stmt); $infected_rows=mysqli_stmt_infected_rows($stmt); 如果($infected_rows==1){ 回显“用户输入”; mysqli_stmt_close($stmt); mysqli_close($dbc); }否则{ echo“出现错误”; echo mysqli_错误(); mysqli_stmt_close($stmt); mysqli_close($dbc); }
我试图完成的是构建一个字符串(Php mysqli_stmt_bind_param试图以字符串形式传递混合变量 foreach($data\u可接受为$key=>$value) { 如果($key!='submit'&&$value!='submit') { $fields_array[]=$key; $values\u数组[]=$value; $placeholder_type.=“s”; $placeholder_num.=“?,”; $complete_array_info.='$data_acceptable'.“['.''.$key.'],”; } } //从数组生成字符串 $fields=内爆(“,”,$fields\u数组); //在列名周围添加“”,示例='user\u name' $values=“”。内爆(“,”,$values_数组)。“”; //删除最后一个,示例=?,?,? $placeholder\u num=substr($placeholder\u num,0,-1); $complete\u array\u info=substr($complete\u array\u info,0,-2); echo$complete_array_info.“”;/输出:$data_acceptable['email'],$data_acceptable['user_name'],$data_acceptable['password'] echo$placeholder_type.“”;//输出:sss $query=“插入到用户(“.$fields”)值(“.$placeholder_num”)”; echo$query; 回显“.”$values.“”; $stmt=mysqli_prepare($dbc,$query); mysqli_stmt_bind_param($stmt,$placeholder_type,$complete_array_info); mysqli_stmt_execute($stmt); $infected_rows=mysqli_stmt_infected_rows($stmt); 如果($infected_rows==1){ 回显“用户输入”; mysqli_stmt_close($stmt); mysqli_close($dbc); }否则{ echo“出现错误”; echo mysqli_错误(); mysqli_stmt_close($stmt); mysqli_close($dbc); },php,mysql,prepared-statement,procedural,Php,Mysql,Prepared Statement,Procedural,我试图完成的是构建一个字符串($complete\u array\u info)来存储mysqli\u stmt\u bind\u参数($stmt,$placeholder\u type,$complete\u array\u info)中混合变量的语法 我得到的错误是,存储在$placeholder\u type中的sss正在定义3个字符串变量以通过$placeholder\u num(?,?,?)但$complete\u array\u info($data\u acceptable['em
$complete\u array\u info
)来存储mysqli\u stmt\u bind\u参数($stmt,$placeholder\u type,$complete\u array\u info)中混合变量的语法代码>
我得到的错误是,存储在$placeholder\u type
中的sss正在定义3个字符串变量以通过$placeholder\u num
(?,?,?)但$complete\u array\u info
($data\u acceptable['email']、$data\u acceptable['user\u name']、$data\u acceptable['password'))未执行所需的正确参数。如果我将$complete\u array\u info
的内容粘贴到它的位置,一切正常
我对php和MySQL比较陌生,所以可能有一个完全不同的函数可以使用,我不知道,但所有这些的最终目标是拥有我自己的个人函数,我可以重用它来创建一个准备好的语句,以便通过占位符将任意数量的列插入数据库
任何帮助都将不胜感激。您不能在mysqli中绑定参数数组。尝试以下方法:-或迁移到PDO。可能重复$complete_array_info=“$data_acceptable['email'],$data_acceptable['user_name'],$data_acceptable['password']”代码>它只是一个字符串,而不是实际数组。也许我误解了你回复中的绑定数组注释?
foreach ($data_acceptable as $key => $value)
{
if($key != 'submit' && $value != 'submit')
{
$fields_array[] = $key;
$values_array[] = $value;
$placeholder_type .= "s";
$placeholder_num .= "?,";
$complete_array_info .= '$data_acceptable'."['".$key."'], ";
}
}
// Builds strings from arrays
$fields = implode(", ", $fields_array);
// Adds ' ' around column names , example = 'user_name'
$values = "'".implode("', '", $values_array)."'";
// Removes last , example = ?,?,?
$placeholder_num = substr($placeholder_num, 0, -1);
$complete_array_info = substr($complete_array_info, 0, -2);
echo $complete_array_info."<br /><br />"; // outputs: $data_acceptable['email'], $data_acceptable['user_name'], $data_acceptable['password']
echo $placeholder_type."<br /><br />"; // outputs: sss
$query = "INSERT INTO users (".$fields.") VALUES (".$placeholder_num.")";
echo $query;
echo "<br />".$values."<br />";
$stmt = mysqli_prepare($dbc, $query);
mysqli_stmt_bind_param($stmt, $placeholder_type, $complete_array_info);
mysqli_stmt_execute($stmt);
$affected_rows = mysqli_stmt_affected_rows($stmt);
if($affected_rows == 1){
echo 'User Entered';
mysqli_stmt_close($stmt);
mysqli_close($dbc);
} else {
echo 'Error Occurred<br>';
echo mysqli_error();
mysqli_stmt_close($stmt);
mysqli_close($dbc);
}