Dans le développement de PHP, en particulier lors de la gestion des opérations de base de données, il est crucial de capturer et de traiter les informations d'erreur. Surtout lorsque nous utilisons la base de données MySQL, MySQLI_STMT :: $ ERROR est une propriété utilisée pour obtenir des erreurs de requête SQL. Il peut aider les développeurs à découvrir et à résoudre des problèmes en temps opportun. Dans un environnement de test unitaire, nous pouvons également l'utiliser pour capturer et traiter les informations d'erreur, améliorant ainsi l'efficacité de débogage et d'optimisation des opérations de base de données.
Cet article présentera comment capturer MySQLI_STMT :: $ Message d'erreur d'erreur dans les tests unitaires PHP et vous fournir quelques conseils de débogage.
Tout d'abord, nous devons créer une connexion de base de données et exécuter une requête SQL. Lorsque vous effectuez des opérations de base de données, si une erreur se produit, l'erreur MySQLI_STMT :: $ stockera le message d'erreur. Voici un exemple simple montrant comment capturer et gérer MySQLI_STMT :: $ Erreur .
<?php
// Supposons que nous ayons établi unMySQLiconnecter
$mysqli = new mysqli("localhost", "user", "password", "database");
// 检查connecter是否成功
if ($mysqli->connect_error) {
die("connecter失败: " . $mysqli->connect_error);
}
// PréparerSQLDéclaration de requête
$sql = "SELECT * FROM nonexistent_table"; // Requête intentionnellement mauvaise
// Déclarations de prétraitement
$stmt = $mysqli->prepare($sql);
if ($stmt === false) {
// Si le prétraitement échoue,Erreurs de capture
echo "Déclarations de prétraitement错误: " . $mysqli->error;
} else {
// Exécuter une requête
$stmt->execute();
// Vérifiez les résultats d'exécution
if ($stmt->errno) {
// Capture et sortie des messages d'erreur
echo "Erreur d'exécution: " . $stmt->error;
} else {
echo "Interroger réussi";
}
}
// 关闭connecter
$stmt->close();
$mysqli->close();
?>
Dans cet exemple, nous avons délibérément utilisé un nom de table non existant_table qui n'existe pas, ce qui entraînerait l'échec de la requête. En vérifiant mysqli_stmt :: $ error et mysqli_stmt :: $ errno , nous pouvons capturer le message d'erreur et le déboguer.
Dans un environnement de test unitaire, nous pouvons utiliser le framework PHPUnit pour tester. Pour capturer le message d'erreur MySQLLI_STMT :: $ , nous pouvons utiliser la méthode d'affirmation de Phpunit. Voici un exemple de test unitaire de base:
<?php
use PHPUnit\Framework\TestCase;
class DatabaseTest extends TestCase
{
private $mysqli;
protected function setUp(): void
{
// 设置数据库connecter
$this->mysqli = new mysqli("localhost", "user", "password", "database");
}
public function testQueryExecutionError()
{
// Rédaction d'une requête incorrecte exprès
$sql = "SELECT * FROM nonexistent_table";
$stmt = $this->mysqli->prepare($sql);
// 确保Déclarations de prétraitement没有错误
$this->assertFalse($stmt === false, "Déclarations de prétraitement失败: " . $this->mysqli->error);
// Exécuter une requête
$stmt->execute();
// Vérifiez si l'exécution est réussie
$this->assertEquals(0, $stmt->errno, "L'exécution de la requête a échoué: " . $stmt->error);
}
protected function tearDown(): void
{
// 关闭数据库connecter
$this->mysqli->close();
}
}
?>
Dans ce test unitaire, nous avons délibérément utilisé une requête incorrecte pour simuler une opération de base de données ratée. Les méthodes $ this-> ASSERTFALSE et $ this-> ASserTequals sont utilisées pour vérifier que la requête SQL est exécutée avec succès. Si une erreur se produit, nous publierons le message d'erreur correspondant pour nous aider à déboguer.
En plus de la sortie directe des informations d'erreur, dans l'environnement de production, nous pouvons également enregistrer des informations d'erreur dans le journal pour la visualisation ultérieure. L'exemple suivant montre comment enregistrer MySQLI_STMT :: $ Informations d'erreur dans un fichier journal.
<?php
// Supposons que nous ayons établi unMySQLiconnecter
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_error) {
die("connecter失败: " . $mysqli->connect_error);
}
$sql = "SELECT * FROM nonexistent_table";
$stmt = $mysqli->prepare($sql);
if ($stmt === false) {
error_log("Déclarations de prétraitement错误: " . $mysqli->error, 3, "/var/log/mysql_errors.log");
} else {
$stmt->execute();
if ($stmt->errno) {
error_log("Erreur d'exécution: " . $stmt->error, 3, "/var/log/mysql_errors.log");
}
}
$stmt->close();
$mysqli->close();
?>
Dans cet exemple, la fonction error_log est utilisée pour enregistrer les informations d'erreur dans le fichier /var/log/mysql_errors.log . De cette façon, nous pouvons nous assurer que les informations d'erreur ne sont pas perdues et que la post-analyse peut être effectuée facilement.
Résumer
En capturant et en gérant les messages d'erreur à l'aide de l'erreur MySQLI_STMT :: $ , les développeurs peuvent plus facilement déboguer et optimiser les opérations de base de données. Dans les tests de l'unité PHP, nous pouvons utiliser le cadre PHPUnit pour assister aux erreurs et faire des affirmations pour améliorer encore la robustesse de notre code. De plus, la journalisation est également une bonne pratique qui peut nous aider à suivre et à résoudre les problèmes potentiels.
Si vous souhaitez écrire un code de fonctionnement de base de données plus robuste via PHP, assurez-vous d'apprendre ces conseils!