Maison >base de données >tutoriel mysql >Comment puis-je optimiser l'utilisation des instructions préparées en PHP avec MySQLi ?

Comment puis-je optimiser l'utilisation des instructions préparées en PHP avec MySQLi ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-19 09:31:12891parcourir

How Can I Optimize Prepared Statement Usage in PHP with MySQLi?

Utilisation optimisée des instructions préparées en PHP avec MySQLi

Votre code semble ne pas avoir la liaison des paramètres à l'instruction préparée. Selon la documentation mysqli::prepare, les marqueurs de paramètres doivent être liés avant d'exécuter une instruction.

// Bind parameters for the first insertion
$name1 = 'one';
$age1  = 1;
$stmt->bind_param('si', $name1, $age1);

// Execute for the first insertion
$stmt->execute();

// Bind parameters for the second insertion
$name2 = 'two';
$age2  = 1;
$stmt->bind_param('si', $name2, $age2);

// Execute for the second insertion
$stmt->execute();

Avantages de mysqli

Bien que mysqli ne soit pas la seule bibliothèque qui prend en charge les déclarations préparées, il offre plusieurs avantages :

  • Amélioré sécurité : Les instructions préparées protègent contre les attaques par injection SQL en empêchant l'exécution de requêtes SQL arbitraires.
  • Performances améliorées : Les instructions préparées réutilisent les requêtes analysées, ce qui entraîne une efficacité accrue.
  • Gestion des erreurs : Les instructions préparées fournissent un meilleur rapport et une meilleure gestion des erreurs capacités.

Exemple complet avec gestion des erreurs

Voici un exemple complet d'utilisation d'instructions préparées en PHP avec MySQLi, y compris la gestion des erreurs :

// Database connection
$mysqli = new mysqli("localhost", "root", "root", "test");

if ($mysqli->connect_errno) {
    echo "Failed to connect: " . $mysqli->connect_error;
    exit;
}

// Prepare statement
$stmt = $mysqli->prepare("INSERT INTO users (name, age) VALUES (?,?)");

if (!$stmt) {
    echo "Prepare failed: " . $mysqli->error;
    exit;
}

// Bind parameters for the first insertion
$name1 = 'one';
$age1  = 1;
$stmt->bind_param('si', $name1, $age1);

// Execute for the first insertion
$stmt->execute();

if ($stmt->errno) {
    echo "Execution failed: " . $stmt->error;
    exit;
}

// Bind parameters for the second insertion
$name2 = 'two';
$age2  = 1;
$stmt->bind_param('si', $name2, $age2);

// Execute for the second insertion
$stmt->execute();

if ($stmt->errno) {
    echo "Execution failed: " . $stmt->error;
    exit;
}

// Selection statement
$stmt = $mysqli->prepare("SELECT * FROM users WHERE age = ?");

if (!$stmt) {
    echo "Prepare failed: " . $mysqli->error;
    exit;
}

// Bind parameters for selection
$age  = 1;
$stmt->bind_param('i', $age);

// Execute selection
$stmt->execute();

if ($stmt->errno) {
    echo "Execution failed: " . $stmt->error;
    exit;
}

// Fetch results
$result = $stmt->get_result();

if (!$result) {
    echo "Fetch failed: " . $stmt->error;
    exit;
}

while ($row = $result->fetch_assoc()) {
    echo $row['name'] . " " . $row['age'] . "<br>";
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn