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

Apprenez à utiliser les instructions préparées par MySQLi pour les opérations de base de données

<p>J'essaie d'utiliser des instructions préparées, mais le code ci-dessous ne fonctionne pas. J'ai reçu l'erreur suivante : </p> <blockquote> <p>Erreur fatale : appel de la fonction membre non-objet execute() à la ligne 12 de /var/www/prepared.php</p> </blockquote> <pre class="brush:php;toolbar:false;"><?php $mysqli = new mysqli("localhost", "root", "root", "test"); si ($mysqli->connect_errno) { echo "Échec de la connexion à MySQL :" $mysqli->connect_error; } $stmt = $mysqli->prepare("INSERT INTO users (name, age) VALUES (?,?)"); //Insérer une ligne $stmt->execute(array('one',1)); // Insère une autre ligne avec des valeurs différentes $stmt->execute(array('two',1)); ?>≪/pré> <p>Dois-je également utiliser mysqli pour les instructions préparées ? Quelqu'un peut-il m'indiquer un exemple d'instruction préparée complète, comprenant les jointures, les insertions et les sélections, ainsi que la gestion des erreurs ? </p>
P粉838563523P粉838563523394 Il y a quelques jours444

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

  • P粉729436537

    P粉7294365372023-08-25 12:07:07

    Vous pouvez également utiliser du PDO que je préfère. En fait, dans votre exemple de code, vous semblez confondre PDO et Mysqli.

    $db = new PDO($dsn, $user, $pass);
    $stmt = $db->prepare("INSERT INTO users (name, age) VALUES (?,?)");
    $stmt->execute(array($name1, $age1));
    $stmt->execute(array($name2, $age2));

    Contrairement à MySQLi, vous n'avez pas besoin d'appeler une fonction de liaison distincte, bien que la fonctionnalité soit disponible si vous l'aimez/voulez/devez l'utiliser.

    Une autre chose intéressante à propos du PDO sont les espaces réservés nommés, qui peuvent être moins déroutants dans les requêtes complexes :

    $db = new PDO($dsn, $user, $pass);
    $stmt = $db->prepare("INSERT INTO users (name, age) VALUES (:name,:age)");
    $stmt->execute(array(':name' => $name1, ':age' => $age1));
    $stmt->execute(array(':name' => $name2, ':age' => $age2));

    répondre
    0
  • P粉348088995

    P粉3480889952023-08-25 09:46:53

    De mysqli::prepareDocuments :

    bind_paramDocumentation.

    C'est-à-dire :

    $name = 'one';
    $age  = 1;
    
    $stmt = $mysqli->prepare("INSERT INTO users (name, age) VALUES (?,?)");
    
    // 绑定参数。我猜测是'string'和'integer',但请阅读文档。
    $stmt->bind_param('si', $name, $age);
    
    // *现在*我们可以执行
    $stmt->execute();

    répondre
    0
  • Annulerrépondre