PHP Unconference Europe 2015

sqlite_exec

SQLiteDatabase::exec

(PHP 5 < 5.4.0, PECL sqlite >= 1.0.3)

sqlite_exec -- SQLiteDatabase::execEjecutar una consulta sin resultado en una base de datos dada

Descripción

bool sqlite_exec ( resource $dbhandle , string $query [, string &$error_msg ] )
bool sqlite_exec ( string $query , resource $dbhandle )

Estilo orientado a objetos (método):

public bool SQLiteDatabase::queryExec ( string $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).

Advertencia

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 dbhandle es 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

add a note add a note

User Contributed Notes 2 notes

up
0
nonproffessional at clockworkgeek dot com
6 years ago
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".
up
0
rrf5000 at psu dot edu
7 years ago
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.
To Top