(PHP 5, PECL sqlite >= 1.0.3)
sqlite_exec -- SQLiteDatabase->exec — Führt eine ergebnislose Abfrage in einer definierten Datenbank aus
Objektorientierter Stil (Methode):
Führt eine SQL-Anweisung, die durch query gesetzt wurde, mit dem Datenbank-Handle (definiert durch den Parameter dbhandle) aus.
SQLite kann mehrere, durch Semikolon getrennte Anweisungen ausführen. Dadurch kann man eine Reihe von Anweisungen aus einer Datei oder einem eingebetteten Skript laden und ausführen.
Die Ressource der SQLite-Datenbank, die bei prozeduraler Benutzung von sqlite_open() zurückgegeben wurden. Der Parameter wird bei der objektorientierten Notation nicht benötigt.
Die auszuführende Anweisung.
Daten innerhalb einer Anfrage sollten maskiert werden.
Die angegebene Variable wird bei einem Fehler gefüllt. Das ist insbesondere deswegen wichtig, weil SQL-Syntaxfehler nicht durch die Funktion sqlite_last_error() abgerufen werden können.
Hinweis: Zwei alternative Syntaxen werden für die Kompatibilität mit anderen Datenbank-Erweiterungen (wie z.B. MySQL) unterstützt. Die bevorzugte Form ist die erste, bei der der Parameter dbhandle der erste Parameter der Funktion ist.
Die Funktion liefert ein boolsches Ergebnis; TRUE bei Erfolg, ansonsten FALSE. Wenn man eine Abfrage ausführen möchte, die Zeilen zurück liefern soll, sollte man bei sqlite_query() gucken.
Die Groß- und Kleinschreibung der Spaltennamen, die von SQLITE_ASSOC und SQLITE_BOTH zurückgegeben werden, wird entsprechend der Konfigurationsdirektive sqlite.assoc_case geändert.
Version | Beschreibung |
---|---|
5.1.0 | Parameter error_msg wurde hinzugefügt |
Beispiel #1 Prozedurales Beispiel
<?php
$dbhandle = sqlite_open('mysqlitedb');
$query = sqlite_exec($dbhandle, "UPDATE benutzer SET email='jDoe@example.com' WHERE benutzername='jDoe'", $error);
if (!$query) {
exit("Fehler in der Abfrage: '$error'");
} else {
echo 'Anzahl geänderter Zeilen: ', sqlite_changes($dbhandle);
}
?>
Beispiel #2 Objektorientiertes Beispiel
<?php
$dbhandle = new SQLiteDatabase('mysqlitedb');
$query = $dbhandle->queryExec("UPDATE benutzer SET email='jDoe@example.com' WHERE benutzername='jDoe'", $error);
if (!$query) {
exit("Fehler in der Abfrage: '$error'");
} else {
echo 'Anzahl geänderter Zeilen: ', $dbhandle->changes();
}
?>
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".
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.