Maison  >  Article  >  développement back-end  >  Comment interroger en php

Comment interroger en php

王林
王林original
2023-05-07 09:12:06861parcourir

Avec le développement de la technologie Internet, les bases de données sont devenues un moyen important de stockage de données. PHP est un langage de script côté serveur largement utilisé qui joue également un rôle important dans le développement de sites Web. En PHP, interroger la base de données est l’une des opérations courantes en développement. Ainsi, cet article expliquera comment effectuer des opérations de requête en PHP.

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

Avant d'effectuer des opérations de requête, nous devons d'abord nous connecter à la base de données. PHP fournit une fonction intégrée mysqli_connect(), qui est utilisée pour ouvrir une nouvelle connexion au serveur MySQL. Cette fonction doit transmettre des paramètres tels que l'adresse du serveur, le nom d'utilisateur, le mot de passe et le nom de la base de données. L'exemple de code est le suivant :

<?php
$servername = "localhost";
$username = "yourusername";
$password = "yourpassword";
$dbname = "yourdbname";

// 创建连接
$conn = mysqli_connect($servername, $username, $password, $dbname);

// 检测连接是否成功
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
?>

Dans le code ci-dessus, nous transmettons quatre paramètres : l'adresse du serveur, le nom d'utilisateur, le mot de passe et le nom de la base de données. Si la connexion échoue, les informations d'erreur sont affichées via la fonction mysqli_connect_error(). Si la connexion réussit, « Connecté avec succès » s'affiche.

2. Exécutez l'instruction de requête

Une fois la connexion réussie, nous pouvons utiliser la fonction mysqli_query() pour exécuter l'instruction de requête. Cela nécessite de transmettre deux paramètres : l'objet de connexion et l'instruction SQL à exécuter. L'exemple de code est le suivant :

<?php
$sql = "SELECT id, name, age FROM users";
$result = mysqli_query($conn, $sql);

if (mysqli_num_rows($result) > 0) {
    // 输出数据
    while($row = mysqli_fetch_assoc($result)) {
        echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - Age: " . $row["age"]. "<br>";
    }
} else {
    echo "0 results";
}

// 关闭连接
mysqli_close($conn);
?>

Dans le code ci-dessus, nous avons exécuté une instruction SELECT pour interroger les données des colonnes id, name et age de la table des utilisateurs. Nous utilisons la fonction mysqli_query() pour exécuter l'instruction et stocker le résultat dans $result. Si les données sont interrogées, les données de l'ensemble de résultats sont lues ligne par ligne via la fonction mysqli_fetch_assoc() et affichées sur la page. Si aucune donnée n’est trouvée, « 0 résultat » est affiché. Enfin, nous fermons la connexion à l'aide de la fonction mysqli_close().

3. Empêcher l'injection SQL

Bien que l'opération de requête de base ait été effectuée dans l'exemple ci-dessus, en raison de l'existence de l'injection SQL, nous devons être plus prudents dans le développement réel. PHP fournit certaines fonctions pour empêcher les attaques par injection SQL.

  1. Fonction mysqli_real_escape_string()

Cette fonction est utilisée pour échapper aux caractères spéciaux dans les requêtes SQL, tels que les guillemets simples, les guillemets doubles, etc. Nous pouvons utiliser cette fonction pour échapper aux données d'entrée avant d'exécuter l'opération de requête afin d'éviter que des utilisateurs malveillants ne transmettent du code d'injection SQL. L'exemple de code est le suivant :

<?php
$name = mysqli_real_escape_string($conn, $_POST['name']);
$sql = "SELECT * FROM users WHERE name='$name'";
$result = mysqli_query($conn, $sql);

if ($result) {
    // 输出数据
    while($row = mysqli_fetch_assoc($result)) {
        echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - Age: " . $row["age"]. "<br>";
    }
} else {
    echo "0 results";
}

// 关闭连接
mysqli_close($conn);
?>

Dans le code ci-dessus, nous utilisons la fonction mysqli_real_escape_string() pour échapper au $name saisi par l'utilisateur. Lors de la construction de l'instruction de requête, le $name échappé est inséré dans l'instruction SQL pour éviter les attaques par injection SQL.

  1. Instructions préparées

En PHP, nous pouvons également utiliser des instructions préparées pour éviter les attaques par injection SQL. Une instruction préparée consiste à envoyer une commande de prétraitement à la base de données avant d'exécuter l'instruction SQL pour indiquer à la base de données la structure et le type de données de l'instruction SQL à exécuter. Ensuite, les paramètres de requête sont envoyés à la base de données avec l'instruction préparée pour éviter les attaques par injection SQL. L'exemple de code est le suivant :

<?php
$stmt = $conn->prepare("SELECT * FROM users WHERE name=?");
$stmt->bind_param("s", $name);

$name = mysqli_real_escape_string($conn, $_POST['name']);
$stmt->execute();
$result = $stmt->get_result();

if ($result->num_rows > 0) {
    // 输出数据
    while($row = $result->fetch_assoc()) {
        echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - Age: " . $row["age"]. "<br>";
    }
} else {
    echo "0 results";
}

// 关闭连接
$stmt->close();
$conn->close();
?>

Dans le code ci-dessus, nous avons d'abord créé l'instruction préparée à l'aide de la fonction $conn->prepare() et lié les paramètres à l'aide de la fonction $stmt->bind_param(). Avant d'exécuter l'opération de requête, nous échappons au $name saisi par l'utilisateur et l'attribuons à la variable $s dans le paramètre de liaison. Enfin, nous utilisons la fonction $stmt->execute() pour exécuter l'instruction préparée et la fonction $stmt->get_result() pour obtenir les résultats de la requête, complétant ainsi l'opération de requête.

4. Conclusion

Interroger la base de données en PHP est une opération très courante, mais en raison de l'existence d'attaques par injection SQL, il faut être plus prudent. Dans le développement réel, nous effectuons généralement des opérations de requête en conjonction avec les mesures anti-injection présentées ci-dessus. J'espère que cet article pourra être utile pour interroger les opérations dans le développement PHP.

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
Article précédent:php ne peut pas voir le HTMLArticle suivant:php ne peut pas voir le HTML