【发布时间】:2020-09-30 17:46:11
【问题描述】:
我尝试了多种方法来创建一个函数来将动态数组值绑定到 MySQLi 准备好的语句中。但我收到错误“未捕获的 mysqli_sql_exception:未为准备好的语句中的参数提供数据”
这是我的代码:
if (count($fields) == count($values)) {
$fielddata = implode(", ", $fields);
$questions = rtrim(str_repeat("?, ", count($values)), ", ");
$typedata = implode("", $type);
foreach ($values as $index => $current_val){ // build type string and parameters
$value .= '$values['.$index.'],';
}
$value = rtrim($value,',');
$statement = "INSERT INTO ".$table." (".$fielddata.") VALUES (".$questions.")";
$stmt = $db->prepare($statement);
$stmt->bind_param("sss", $value);
$stmt->execute();
$stmt->close();
echo "inserted";
}
当我替换时相同的代码工作
$stmt->bind_param("sss", $value);
与
$stmt->bind_param("sss",$values[0],$values[1],$values[2]);
【问题讨论】:
-
绑定循环内的值,而不是连接变量。
-
由于此代码旨在用于插入具有相同数量值的可变数量的列,因此
"sss"部分肯定也需要动态创建 -
@olibiaz 这是
mysqli_*,而不是PDO。我对mysqli不是很熟悉,但据我所知,它不支持这个
标签: php mysqli prepared-statement bindparam