Just to point out that "CREATE TABLE IF NOT EXISTS" is only supported in SQLite version 3.3.0 or above. And PHP (currently 5.2.5) only comes with SQLite version 2.1.
Executing a create table like this will throw an error as will creating a table that already exists. Instead execute a normal "CREATE TABLE" command and catch it with "try {..} catch".
sqlite_exec
SQLiteDatabase::exec
(PHP 5, PECL sqlite >= 1.0.3)
sqlite_exec -- SQLiteDatabase::exec — Exécute une requête sans résultats sur une base de données
Description
Style orienté objet (méthode) :
sqlite_exec() exécute une requête SQL query sur une base de données spécifiée par la ressource dbhandle.
SQLite doit exécuter de multiples requêtes séparées par des points-virgules ; vous pouvez donc l'utiliser pour exécuter un script SQL que vous avez chargé depuis un fichier ou que vous avez intégré dans un script.
Liste de paramètres
- dbhandle
-
La ressource de base de données SQLite; retournée par sqlite_open() lorsque utilisée de manière procédurale. Ce paramètre n'est pas requis si vous utilisez la méthode orientée objet.
- query
-
La requête à être exécutée.
Les données contenues dans la requête doivent être échappées.
- error_msg
-
La variable spécifiée sera remplie si une erreur se produit. Ceci est important car les erreurs de syntaxes SQL ne peuvent être récupérées en utilisant la fonction sqlite_last_error().
Note: Deux syntaxes alternatives sont supportées pour assurer la compatibilité avec les autres bases de données (telles que MySQL) : la forme recommandée est la première, où le paramètre dbhandle est le premier dans la fonction.
Valeurs de retour
Cette fonction retourne un résultat booléen; TRUE en cas de succès, FALSE en cas d'erreur. Si vous avez besoin d'exécuter une requête qui doit retourner des lignes, reportez-vous à la fonction sqlite_query().
Les noms de colonnes retournés par SQLITE_ASSOC et SQLITE_BOTH suivent les règles concernant la case définie par l'option de configuration sqlite.assoc_case.
Historique
| Version | Description |
|---|---|
| 5.1.0 | Ajout du paramètre error_msg |
Exemples
Exemple #1 Style procédural
<?php
$dbhandle = sqlite_open('mysqlitedb');
$query = sqlite_exec($dbhandle, "UPDATE users SET email='jDoe@example.com' WHERE username='jDoe'", $error);
if (!$query) {
exit("Erreur dans la requête : '$error'");
} else {
echo 'Nombre de lignes modifiées : ', sqlite_changes($dbhandle);
}
?>
Exemple #2 Style orienté objet
<?php
$dbhandle = new SQLiteDatabase('mysqlitedb');
$query = $dbhandle->exec("UPDATE users SET email='jDoe@example.com' WHERE username='jDoe'", $error);
if (!$query) {
exit("Erreur dans la requête : '$error'");
} else {
echo 'Nombre de lignes modifiées : ', $dbhandle->changes();
}
?>
Voir aussi
- sqlite_query() - Exécute une requête SQLite et lit le résultat
- sqlite_unbuffered_query() - Exécute une requête SQLite non bufferisée
- sqlite_array_query() - Exécute une requête SQL avec SQLite et retourne un tableau
If you run a multiline SQL command (an INSERT, for example), and there is a SQL error in any of the lines, this function will recognize the error and return FALSE. However, any correct commands before the one with the error will still execute. Additionally, if you run changes() after such an incident, it will report that 0 rows have been changed, even though there were rows added to the table by the successful commands.
An example would be:
<?php
// create new database (OO interface)
$dbo = new SQLiteDatabase("db/database.sqlite");
// create table foo
$dbo->query("CREATE TABLE foo(id INTEGER PRIMARY KEY, name CHAR(255));");
// insert sample data
$ins_query = "INSERT INTO foo (name) VALUES ('Ilia1');
INSERT INTO foo (name) VALUES('Ilia2');
INSECT INTO foo (name) VALUES('Ilia3');";
$dbo->queryExec($ins_query);
// get number of rows changed
$changes = $dbo->changes();
echo "<br />Rows changed: $changes<br />";
// Get and show inputted data
$tableArray = $dbo->arrayQuery("SELECT * FROM foo;");
echo "Table Contents\n";
echo "<pre>\n";
print_r($tableArray);
echo "\n</pre>";
?>
The above code should show that 0 rows have been changed, but that there is new data in the table.
