Heim  >  Fragen und Antworten  >  Hauptteil

Nicht erfasster ValueError: mysqli_stmt::execute(): Parameter #1 ($params) muss ein Array von Listen sein

Ich versuche, mit einer vorbereiteten Anweisung über diese beiden Abfragen mehrere Werte in meine Datenbank einzufügen. Beide Abfragen schlagen fehl und geben einen von ihnen zurück

Ungefangener Fehler: Aufruf der undefinierten Methode mysqli_stmt::bindValue()

Erster Code oder

Ungefangener ValueError: mysqli_stmt::execute(): Parameter #1 ($params) Muss ein Listenarray sein

Der Zweite. Wenn ich list 而不是 array tippe, steht

Grammatikfehler

HinweisAlle Variablen-, Tabellen- und Spaltennamen sind vereinfachte Varianten

Ich habe viele ähnliche Fragen gesehen, aber keine davon beantwortet meine Frage. Nicht einmal diese „Wiederholung“.

Hat jemand eine Lösung oder eine Alternative?

Hier sind die beiden Codes:

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 Tage vor364

Antworte allen(1)Ich werde antworten

  • 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();

    Antwort
    0
  • StornierenAntwort