为什么准备好的语句在 bind_params 上失败?
Why is prepared statement failing on bind_params?
我正在使用准备好的语句向我的数据库中添加行。我正在重组我的代码,运行 遇到了 bind_param 的问题 - 我认为它是语法问题,但无法弄清楚哪里出了问题。
No data supplied for parameters in prepared statement
function insertRow($fieldNames, $fields, $table, $link) {
$field_names=implode(', ',$fieldNames);
$field_values=implode(', ',$fields);
//add question marks
$q_marks=array();
forEach($fieldNames as &$qm) {
array_push($q_marks, "?");
}
$qs = implode(',',$q_marks);
$stmnt = "INSERT INTO $table ($field_names) VALUES ($qs)";
echo("<br>$stmnt<br>");
$addrow = $link->prepare("INSERT INTO $table ($field_names) VALUES ($qs)");
//add param types (all strings)
$s_chars=array();
forEach($fieldNames as &$s) {
array_push($s_chars, "s");
}
$s = implode('',$s_chars);
echo("$s, $field_values<br>");
$addrow->bind_param($s, $field_values);
try {
echo("adding row...");
$addrow->execute();
} catch(Exception $e){
echo("error: " .$e ."<br>");
return false;
}
}
正在尝试使用线路
$addrow->bind_param($s, $field_values);
尝试传递以逗号连接的字段列表。这实际上应该是每个值的值作为一个单独的值。这可以使用 splat 运算符 (...
) 和原始字段值轻松完成...
$addrow->bind_param($s, ...$fields);
您还可以对代码的其他部分进行一些调整,而不是...
$s_chars=array();
forEach($fieldNames as &$s) {
array_push($s_chars, "s");
}
$s = implode('',$s_chars);
你可以直接使用
$s = str_repeat("s", count($fieldNames));
我正在使用准备好的语句向我的数据库中添加行。我正在重组我的代码,运行 遇到了 bind_param 的问题 - 我认为它是语法问题,但无法弄清楚哪里出了问题。
No data supplied for parameters in prepared statement
function insertRow($fieldNames, $fields, $table, $link) {
$field_names=implode(', ',$fieldNames);
$field_values=implode(', ',$fields);
//add question marks
$q_marks=array();
forEach($fieldNames as &$qm) {
array_push($q_marks, "?");
}
$qs = implode(',',$q_marks);
$stmnt = "INSERT INTO $table ($field_names) VALUES ($qs)";
echo("<br>$stmnt<br>");
$addrow = $link->prepare("INSERT INTO $table ($field_names) VALUES ($qs)");
//add param types (all strings)
$s_chars=array();
forEach($fieldNames as &$s) {
array_push($s_chars, "s");
}
$s = implode('',$s_chars);
echo("$s, $field_values<br>");
$addrow->bind_param($s, $field_values);
try {
echo("adding row...");
$addrow->execute();
} catch(Exception $e){
echo("error: " .$e ."<br>");
return false;
}
}
正在尝试使用线路
$addrow->bind_param($s, $field_values);
尝试传递以逗号连接的字段列表。这实际上应该是每个值的值作为一个单独的值。这可以使用 splat 运算符 (...
) 和原始字段值轻松完成...
$addrow->bind_param($s, ...$fields);
您还可以对代码的其他部分进行一些调整,而不是...
$s_chars=array();
forEach($fieldNames as &$s) {
array_push($s_chars, "s");
}
$s = implode('',$s_chars);
你可以直接使用
$s = str_repeat("s", count($fieldNames));