6.Le langage PHP
6.15.Utilisation de bases de données avec PHP
6.15.2.Utilisation de SQLite
6.15.2.6.Requête SQL ne retournant pas de résultat (ex: CREATE TABLE, INSERT, UPDATE, etc.)
Pour exécuter une requête SQL
[c'est quoi?] nous pouvons faire appel à la méthode
queryExec(). Cette méthode ne levera pas d'exception en cas d'erreur mais retournera la valeur FALSE et le message d'erreur peut être récupéré dans une variable passée en second paramètre.
<?php
$base = 'phpfacile_mabase.sqlite';
try {
$bd = new SQLiteDatabase($base);
} catch (SQLiteException $e) {
die("La création ou l'ouverture de la base [$base] a échouée ".
"pour la raison suivante: ".$e->getMessage());
}
// Ajout de données dans la table
$sql = "INSERT INTO demo (visiteur, datevisite) ".
"VALUES ('phpfacile', '".date("Y-m-d H:i:s")."')";
$reponse = $bd->queryExec($sql, $err);
if ($reponse === FALSE) {
echo "La requête a échouée pour la raison suivante: ".$err;
} else {
echo "Un nouvel enregistrement a été ajouté à la base";
}
// Deconnexion
$bd = null;
?>
Ce script suppose que vous avez au préalable créé une table nommée "demo" possédant un champ visiteur de type chaîne de caractères (ex: VARCHAR(128)) et un champ datevisite de type chaîne de caractères (ex: VARCHAR(19)). Cela peut se faire en exécutant la requête suivante
CREATE TABLE demo (visiteur VARCHAR(64), datevisite VARCHAR(19))
ou en utilisant une interface graphique de gestion des bases SQLite
[comment?] (comme SQLiteManager).
|
- La requête "CREATE TABLE" peut elle-même être exécutée
- via un outil d'administration de SQLite [comment?]
- en modifiant la requête d'insertion du script présenté dans ce chapitre par la requête de création de base. Ce qui donne le code
|
|
6.15.2.7.Requête SQL retournant des résultats (ex: SELECT)
Pour une requête de type SELECT, nous ferons appel à la fonction
query(). Cette méthode retourne un objet résultat (ici la variable $reponse) qui possède une méthode
fetch() permettant de récupéré le premier résultat non lu.
<?php
$base = 'phpfacile_mabase.sqlite';
try {
$bd = new SQLiteDatabase($base);
} catch (SQLiteException $e) {
die("La creation ou l'ouverture de la base [$base] a echouee ".
"pour la raison suivante: ".$e->getMessage());
}
// Lecture des donnees dans la table
$sql = "SELECT visiteur, datevisite FROM demo";
$reponse = $bd->query($sql, SQLITE_BOTH, $err);
if ($reponse === FALSE) {
echo "La requete a echouee pour la raison suivante: ".$err;
} else {
echo "Voici le contenu de la table demo:\n";
while ($row = $reponse->fetch()) {
echo $row['visiteur']." - ".$row['datevisite']."\n";
}
}
// Deconnexion
$bd = null;
?>
Si vous exécutez ce script vous obtiendrez autant de résultats que de fois où vous avez lancé le script d'insertion précédent, avec à chaque fois la date de l'insertion.
L'utilisation de la constante SQLITE_BOTH comme second paramètre de la méthode fetch() permet d'obtenir le résultat sous forme d'un tableau à la fois associatif (les clés du tableau sont les noms des champs de la table) et indexé (à l'index 0 correspond le premier champ retourné par SELECT, à l'index 1 le second, etc.).