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
Libérer: 2024-12-19 09:31:12
original
911 Les gens l'ont consulté

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();
Copier après la connexion

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>";
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal