Uncaught ValueError: mysqli_stmt::execute(): Argument #1 ($params) must be a list array

Uncaught ValueError: mysqli_stmt::execute(): Argument #1 ($params) must be a list array

我正在尝试通过这两个查询在我的数据库中插入准备好的 statemant 多个值,这两个查询都出现故障,返回其中之一

Uncaught Error: Call to undefined method mysqli_stmt::bindValue()

第一个代码或

Uncaught ValueError: mysqli_stmt::execute(): Argument #1 ($params) must be a list array

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

syntax error

注意所有变量,table和列名都是简化变体

我见过很多类似的问题,但是 none 回答了我的问题。连这个都是'duplicate'的那个都没有。

有没有人有解决方案,或者可能有替代方案?

下面是两个代码:

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'],
));

您正在尝试在 MySQLi 中使用 PDO 函数。通读 the docs 有助于理解,但据我所知,你会寻找;

if(isset($_POST['ID'], $_POST['atr1'])){
    $sql = $db->prepare("INSERT INTO some_table (ID, atr_place) VALUES (?,)");
    $sql->bind_param('is', $_POST['ID'],$_POST['atr1']); // i=int s=string
    $sql->execute();
}

正如错误消息所表明的那样,您正在使用 mysqli library to communicate with your database. However your code seems to be based on examples which use 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(array($_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();