Position actuelle: Accueil> Derniers articles> Exemples d'utilisation standard de MySQLI :: STMT_INIT et PREPARET ()

Exemples d'utilisation standard de MySQLI :: STMT_INIT et PREPARET ()

M66 2025-05-29

Les déclarations préparées sont un moyen important d'assurer la sécurité des données et d'améliorer l'efficacité lors de l'utilisation d'extensions MySQLI en PHP. Cet article introduira en détail l'utilisation correcte de la méthode MySQLI :: STMT_INIT et PREPEAY () , et l'analysera en combinaison avec des exemples réels.

1. Qu'est-ce que mysqli :: stmt_init ?

MySQLI :: STMT_INIT est une méthode fournie par MySQLI pour initialiser un objet MySQLI_STMT (instruction) vide. Cet objet peut ensuite être utilisé pour prétraiter les instructions SQL.

La syntaxe est la suivante:

 mysqli_stmt mysqli::stmt_init ( void )

Il est généralement utilisé avec la méthode Pread () pour préparer des instructions SQL.

2. Quelle est la méthode Préparez () ?

La méthode Pread () est utilisée pour préparer une instruction SQL qui sera exécutée ultérieurement et peut être liée à l'aide du paramètre. Cela peut effectivement empêcher les attaques d'injection SQL.

La syntaxe est la suivante:

 bool mysqli_stmt::prepare ( string $query )

3. Explication détaillée des étapes d'utilisation

Voici le processus standard à l'aide de mysqli :: stmt_init et prépare () :

  1. Connectez-vous à la base de données

  2. Initialiser l'objet de déclaration de prétraitement

  3. Préparez la déclaration en utilisant PREPEPT ()

  4. Lier les paramètres (le cas échéant)

  5. Instruction d'exécution

  6. Obtenez le résultat (s'il s'agit d'une déclaration de requête)

  7. Clôtures et connexions étroites

4. Exemples de code détaillé

Supposons que nous ayons une table d' utilisateurs utilisateurs avec des champs: id , nom d'utilisateur , e-mail . Nous voulons interroger l'adresse e-mail de l'utilisateur en fonction du nom d'utilisateur.

 <?php
// premier pas:Établir une connexion de base de données
$mysqli = new mysqli("localhost", "db_user", "db_password", "db_name");

// Vérifiez si la connexion réussit
if ($mysqli->connect_error) {
    die("Échec de la connexion: " . $mysqli->connect_error);
}

// Étape 2:Initialiser l&#39;objet de déclaration de prétraitement
$stmt = $mysqli->stmt_init();

// Étape 3:Préparer SQL Déclaration
$sql = "SELECT email FROM users WHERE username = ?";
if (!$stmt->prepare($sql)) {
    die("SQL Le prétraitement a échoué: " . $stmt->error);
}

// Étape 4:Lier les paramètres
$username = "testuser";
$stmt->bind_param("s", $username);  // "s" Représente le type de chaîne

// Étape 5:执行Déclaration
$stmt->execute();

// Étape 6:Liez les résultats et obtenez les données
$stmt->bind_result($email);
if ($stmt->fetch()) {
    echo "E-mail de l&#39;utilisateur est: " . $email;
} else {
    echo "Cet utilisateur n&#39;a pas été trouvé。";
}

// Étape 7:关闭Déclaration与连接
$stmt->close();
$mysqli->close();
?>

5. Des questions et précautions fréquemment posées

1. Pourquoi ne pas écrire SQL directement avec PREPEP () ?

Bien que SQL puisse être exécuté directement à l'aide de la méthode Query () , cela est vulnérable aux attaques d'injection SQL. La liaison prépare () et le paramètre peuvent effectivement empêcher ce problème.

2. Quelle est la différence entre stmt_init () et prépare () ?

STMT_INIT () crée un objet d'instruction vide et prépare () charge le modèle SQL. Vous pouvez également ignorer STMT_INIT () et appeler directement $ mysqli-> prépare () pour terminer l'initialisation et la préparation en une seule étape.

3. Les objets de déclaration peuvent-ils être réutilisés?

Oui, tant que la structure du modèle SQL est cohérente, l'objet instruction peut être réutilisé et que les paramètres liés peuvent être modifiés.

6. Exemple: insérer des données à l'aide du post Form

L'exemple suivant montre comment soumettre des données via un formulaire et l'insérer en toute sécurité dans la base de données:

 <?php
$mysqli = new mysqli("localhost", "db_user", "db_password", "db_name");

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $username = $_POST["username"] ?? "";
    $email = $_POST["email"] ?? "";

    $stmt = $mysqli->stmt_init();
    if ($stmt->prepare("INSERT INTO users (username, email) VALUES (?, ?)")) {
        $stmt->bind_param("ss", $username, $email);
        if ($stmt->execute()) {
            echo "Enregistrement des utilisateurs avec succès!";
        } else {
            echo "L&#39;exécution a échoué:" . $stmt->error;
        }
        $stmt->close();
    }
}

$mysqli->close();
?>
<form method="POST" action="https://m66.net/register.php">
    nom d&#39;utilisateur:<input type="text" name="username" required><br>
    Mail:<input type="email" name="email" required><br>
    <input type="submit" value="registre">
</form>

7. Résumé

La combinaison de mysqli :: stmt_init et prépare () fournit un puissant mécanisme de sécurité de la base de données pour PHP. La liaison des paramètres empêche non seulement l'injection de SQL, mais améliore également l'efficacité de l'exécution. Dans le développement réel, il est recommandé d'utiliser toujours des instructions de prétraitement pour faire fonctionner la base de données.

Vous voulez continuer à en savoir plus sur l'utilisation avancée de bind_param () et bind_result () dans mysqli?