Maison  >  Questions et réponses  >  le corps du texte

Uncaught ValueError : mysqli_stmt::execute() : le paramètre n°1 ($params) doit être un tableau de listes

J'essaie d'insérer plusieurs valeurs dans ma base de données avec une instruction préparée via ces deux requêtes, les deux requêtes échouent et renvoient l'une d'elles

Erreur non détectée : appel à la méthode non définie mysqli_stmt::bindValue()

Premier code ou

Uncaught ValueError : mysqli_stmt::execute() : paramètre n°1 ($params) Doit être un tableau de liste

Le deuxième. Quand je tape list 而不是 array ça dit

Erreur de grammaire

RemarqueTous les noms de variables, de tables et de colonnes sont des variantes simplifiées

J'ai vu de nombreuses questions similaires mais aucune ne répond à ma question. Pas même celui-ci « répété ».

Quelqu'un a-t-il une solution, ou une alternative ?

Voici les deux 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粉502608799283 Il y a quelques jours411

répondre à tous(1)je répondrai

  • P粉373596828

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

    Comme l'indique le message d'erreur, vous utilisez la bibliothèque mysqli pour communiquer avec votre base de données. Cependant, votre code semble être basé sur un exemple utilisant PDO , qui est une bibliothèque complètement différente. Bien que certaines fonctions portent des noms superficiellement similaires, elles ont en réalité des API et des exigences différentes.

    Par exemple, certaines différences entre les API sont :

    • mysqli ne prend pas en charge les paramètres nommés, uniquement les espaces réservés anonymes spécifiés à l'aide de ?
    • PDO a les fonctions bindParam et bindValue, tandis que mysqli a bind_param
    • Avant PHP 8.1, mysqli n'acceptait pas les listes de paramètres fournies directement via la fonctionexecute().

    Ce code doit être utilisé avec mysqli :

    Si vous disposez de PHP 8.1 ou supérieur :

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

    Sinon :

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

    répondre
    0
  • Annulerrépondre