首页  >  问答  >  正文

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

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

未捕获错误:调用未定义的方法 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粉502608799P粉502608799233 天前366

全部回复(1)我来回复

  • P粉373596828

    P粉3735968282024-02-04 14:00:15

    正如错误消息所表明的那样,您正在使用 mysqli 与您的数据库进行通信的库。但是,您的代码似乎基于使用 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();

    回复
    0
  • 取消回复