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 < 5.4.0, PECL sqlite >= 1.0.3)
sqlite_exec -- SQLiteDatabase::exec — Ejecutar una consulta sin resultado en una base de datos dada
Descripción
$dbhandle
, string $query
[, string &$error_msg
] )$query
, resource $dbhandle
)Estilo orientado a objetos (método):
$query
[, string &$error_msg
] )
Ejecuta una sentencia SQL dada por query en
un gestor de base de datos dado (especificado por el parámetro
dbhandle).
SQLite ejecutará múltiples consultas separadas por puntos y comas, por lo que se puede usar esta función para ejecutar un lote de SQL que se haya cargado desde un fichero o embebido en un script.
Parámetros
-
dbhandle -
El recurso de Base de datos de SQLite; devuelto por sqlite_open() cuando se usa procedimentalmente. Este parámetro no es necesario cuando se usa el método orientado a objetos.
-
query -
La consulta a ejectuar.
Los datos dentro de la consulta deberían ser apropiadamente escapados.
-
error_msg -
La variable especificada será rellenada si ocurre un error. Esto es especialmente importante ya que los errores de sintaxis de SQL no se pueden recoger usando la función sqlite_last_error().
Nota: Dos sintaxis alternativas son soportadas para la compatibilidad con otras extensiones de base de datos (tal como MySQL). La forma preferida es la primera, donde el parámetro
dbhandlees el primero de la función.
Valores devueltos
Esta función devolverá un resultado booleano; TRUE en caso de éxito o FALSE en caso de error.
Si se necesita ejecutar una consulta que devuelva filas, véase sqlite_query().
Los nombre de las columnas devueltos por
SQLITE_ASSOC y SQLITE_BOTH serán
mayúsculas o no de acuerdo al valor de la opción de configuración
sqlite.assoc_case.
Historial de cambios
| Versión | Descripción |
|---|---|
| 5.1.0 |
Se añadió el parámetro error_msg
|
Ejemplos
Ejemplo #1 Ejemplo procedimental
<?php
$dbhandle = sqlite_open('mysqlitedb');
$query = sqlite_exec($dbhandle, "UPDATE users SET email='jDoe@example.com' WHERE username='jDoe'", $error);
if (!$query) {
exit("Error en la consulta: '$error'");
} else {
echo 'Número de filas modificadas: ', sqlite_changes($dbhandle);
}
?>
Ejemplo #2 Ejemplo orientado a objetos
<?php
$dbhandle = new SQLiteDatabase('mysqlitedb');
$query = $dbhandle->queryExec("UPDATE users SET email='jDoe@example.com' WHERE username='jDoe'", $error);
if (!$query) {
exit("Error en la consulta: '$error'");
} else {
echo 'Número de filas modificadas: ', $dbhandle->changes();
}
?>
Ver también
- sqlite_query() - Ejecutar una consulta en una base de datos dada y devolver un gestor de resultados
- sqlite_unbuffered_query() - Ejecutar una consulta que no precargue ni almacene en buffer toda la información
- sqlite_array_query() - Ejecutar una consulta en una base de datos dada y devolver un array
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.
