Lorsque vous utilisez des bases de données MySQL, PHP fournit une extension MySQLI puissante pour interagir avec la base de données. Une opération commune consiste à utiliser mysqli_query () pour exécuter une requête et obtenir les résultats. En règle générale, l'ensemble de résultats d'une requête est accessible via l'objet mysqli_result . Lorsque les ensembles de résultats de traitement, vous pouvez rencontrer différents types de données, tels que des nombres, des chaînes, des dates, etc.
Cet article présentera comment ajouter un mécanisme de distribution de type à l'ensemble de résultats de la fonction mysqli_result pour s'assurer que chaque champ est traité en fonction du type de données attendu.
Tout d'abord, passons en revue comment utiliser la fonction mysqli_query () pour exécuter les requêtes SQL et obtenir l'objet mysqli_result .
<?php
// Créer une connexion de base de données
$mysqli = new mysqli('localhost', 'username', 'password', 'database_name');
// Vérifiez si la connexion réussit
if ($mysqli->connect_error) {
die("Échec de la connexion: " . $mysqli->connect_error);
}
// Exécutez une requête et obtenez l'ensemble de résultats
$query = "SELECT id, name, price, created_at FROM products";
$result = $mysqli->query($query);
// Vérifiez si la requête est réussie
if ($result) {
// Traiter les résultats de la requête
while ($row = $result->fetch_assoc()) {
// Traiter chaque rangée de données
}
} else {
echo "La requête a échoué: " . $mysqli->error;
}
// Fermer la connexion
$mysqli->close();
?>
Dans cet exemple, nous exécutons une requête SQL via la fonction mysqli_query () et renvoyons un objet mysqli_result . Ensuite, nous opérerons sur l'objet et lirons les données.
La fonction fetch_assoc () de mysqli_result renvoie les données en tant que chaîne par défaut, même si le type réel du champ peut être un entier ou un numéro flottant. Cela nous oblige à effectuer manuellement la coulée de type lors du traitement des résultats de la requête pour garantir que les données répondent au type attendu.
Si un champ est de type entier, nous pouvons le convertir en un casting entier par (int) :
<?php
while ($row = $result->fetch_assoc()) {
$id = (int) $row['id']; // Coulé à entier
echo "Product ID: " . $id . "<br>";
}
?>
Si un champ est un type numérique flottant, nous pouvons le convertir en un type flottant par (float) ou (double) coulé:
<?php
while ($row = $result->fetch_assoc()) {
$price = (float) $row['price']; // Numéro flottant
echo "Product Price: " . $price . "<br>";
}
?>
Pour les champs booléens, nous pouvons le convertir en vrai ou faux :
<?php
while ($row = $result->fetch_assoc()) {
$is_active = (bool) $row['is_active']; // Cast to booléen
echo "Product Active: " . ($is_active ? 'Yes' : 'No') . "<br>";
}
?>
Si un champ est de type de date, nous pouvons le convertir en un objet de date à l'aide de la méthode DateTime :: CreateFromFromat () , ou utiliser directement strToTime () pour le convertir en horodatage:
<?php
while ($row = $result->fetch_assoc()) {
$created_at = strtotime($row['created_at']); // Convertir en horodatage
echo "Created At: " . date('Y-m-d H:i:s', $created_at) . "<br>";
}
?>
Si vous avez plusieurs champs qui doivent être saisis, vous pouvez encapsuler une fonction de fonction de processus personnalisée et de type de processus par lots. Cela peut améliorer la maintenabilité et la réutilisabilité du code.
<?php
function convert_types($row) {
$row['id'] = (int) $row['id'];
$row['price'] = (float) $row['price'];
$row['is_active'] = (bool) $row['is_active'];
$row['created_at'] = strtotime($row['created_at']); // Convertir en horodatage
return $row;
}
while ($row = $result->fetch_assoc()) {
$row = convert_types($row);
echo "Product ID: " . $row['id'] . "<br>";
echo "Product Price: " . $row['price'] . "<br>";
echo "Product Active: " . ($row['is_active'] ? 'Yes' : 'No') . "<br>";
echo "Created At: " . date('Y-m-d H:i:s', $row['created_at']) . "<br>";
}
?>
Dans cet exemple, la fonction convert_types () convertit les données de chaque ligne en type attendu, qui peut être facilement affiché ou d'autres opérations.
En ajoutant un mécanisme de distribution de type à l'ensemble de résultats MySQLI_RESULT , nous pouvons mieux contrôler le type de données et éviter les erreurs causées par un décalage de type. Que la conversion de données en entiers, nombres flottants, booléens ou types de dates, la coulée garantit l'exactitude et la cohérence des données. En encapsulant la fonction de conversion, le code peut également être rendu plus concis et maintenable.
J'espère que cet article vous sera utile lors du traitement des résultats de la requête MySQL!