未捕获的 ArgumentCountError:类型定义字符串中的元素数必须与绑定变量数匹配 预准备语句 [duplicate]

Uncaught ArgumentCountError: The number of elements in the type definition string must match the number of bind variables Prepared statement [duplicate]

提问人:Sonny's Kitchen 提问时间:10/2/2022 最后编辑:DharmanSonny's Kitchen 更新时间:10/2/2022 访问量:1410

问:

我已经检查了我的代码 100 次,但没有找到任何解决方案,我已经检查了很多网站以找到它的解决方案,但没有找到任何东西。这是一个注册系统,我正在努力使其成为完全最简单的注册系统,我的意思是在我的网站中任何地方使用我的功能的最简单方法。我创建了一个名为 database 的函数,其中我创建了一个 switch 语句,该语句将仅通过一个函数从数据库中创建、连接、更新、删除用户数据,但我在 Bind_param 时收到错误。

未捕获的 ArgumentCountError:类型定义字符串中的元素数必须与绑定变量数匹配

$query = "INSERT INTO $table (";

foreach ($tableNames as $key => $value) {
    $query .= "$key, ";
}
$query = substr($query, 0, -2);
$query .= ") VALUES (";
$j = 0;
foreach ($tableNames as $key1 => $value2) {
    for ($a=0; $a < $j; $a++) { 
        ++$j;
    }
    $query .= "?, ";
}
$query = substr($query, 0, -2);
$query .= ")"; //correct working
// echo $query;
$stmt = $conn->prepare("$query");

$fieldsNumb = "";
$l = 0;
foreach ($tableNames as $keyss => $valuess) {
    for ($k=0; $k < $l; $k++) { 
        ++$l;                        
    }
    $fieldsNumb .= "s";
}
$fields = "";
foreach ($tableNames as $keys => $values) {
    $fields .= "$"."$keys".",";
}
// echo $fields;

$fields = substr($fields, 0, -2);
// echo $query;
$stmt->bind_param("$fieldsNumb", $fields);

// set parameters and execute
$stmt->execute();
msg("", "success", "Signedup success");

$stmt->close();
$conn->close();
php mysqli 预备语句

评论

0赞 Nick 10/2/2022
$fieldsin 需要是一组变量,而不是字符串。IIUC,你应该在你拥有的地方使用$stmt->bind_param("$fieldsNumb", $fields);...$tableNames$fields
0赞 Nick 10/2/2022
看看这个,有一种更简单的方法......
0赞 Sonny's Kitchen 10/2/2022
@Nick 现在我收到这个错误。: Uncaught ArgumentCountError: mysqli_stmt::bind_param() does not accept unknown named parameters in
0赞 Sonny's Kitchen 10/3/2022
@Nick我已经检查了所有内容,但仍然没有找到任何解决方案。请帮帮我。我不是编程专家。
0赞 Nick 10/3/2022
这是 PHP 8 的一个变化......您应该能够修复它...array_values($tableNames)

答: 暂无答案