未捕获的 ValueError 错误:mysqli_stmt::execute():参数 #1($params)必须是一个列表数组
P粉502608799
P粉502608799 2024-02-03 17:09:57
0
1
410

我试图通过这两个查询在我的数据库中插入准备好的语句多个值,这两个查询都发生故障,返回其中一个

未捕获错误:调用未定义的方法 mysqli_stmt::bindValue()

第一个代码或

未捕获的 ValueError:mysqli_stmt::execute():参数 #1 ($params) 必须是列表数组

第二个。当我输入 list 而不是 array 时,它显示

语法错误

注意所有变量、表和列名称都是简化的变体

我见过很多类似的问题,但没有一个能回答我的问题。甚至不是这个“重复”的那个。

有人有解决方案,或者替代方案吗?

这是两个代码:

if(isset($_POST['ID'], $_POST['atr1'])){

        $sql = $db -> prepare("INSERT INTO some_table (ID, atr_place) VALUES (':fir', ':sec')");
        
        $sql -> bindValue(':fir', $_POST['ID'],);
        $sql -> bindValue(':sec', $_POST['atr1'],);
        $sql -> execute();
}
$sql = $db -> prepare("INSERT INTO some_table (ID, atr_place) VALUES (:fir, :sec)");
$sql -> execute(array(
    ':fir' => $_POST['ID'],
    ':sec' => $_POST['atr1'],
));

P粉502608799
P粉502608799

全部回复(1)
P粉373596828

正如错误消息所表明的那样,您正在使用 mysqli a> 与您的数据库进行通信的库。但是,您的代码似乎基于使用 PDO 的示例,其中是一个完全不同的图书馆。虽然表面上一些函数名称相似,但实际上它们具有不同的 API 和要求。

例如,一些 API 差异是:

  • mysqli 不支持命名参数,仅支持使用 ? 指定的匿名占位符
  • PDO有bindParam和bindValue函数,而mysqli有bind_param
  • 在 PHP 8.1 之前,mysqli 不接受直接通过execute() 函数提供的参数列表。

此代码应该与 mysqli 一起使用:

如果您有 PHP 8.1 或更高版本:

$sql = $db->prepare("INSERT INTO some_table (ID, atr_place) VALUES (?, ?)");
$sql->execute([$_POST['ID'], $_POST['atr1']]);

否则:

$sql = $db->prepare("INSERT INTO some_table (ID, atr_place) VALUES (?, ?)");
$sql->bind_param("ss", $_POST['ID'], $_POST['atr1']);
$sql->execute();
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!