ScotlandPHP

sqlite_exec

SQLiteDatabase::exec

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

sqlite_exec -- SQLiteDatabase::execВыполняет запрос, не возвращающий записей

Описание

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

Объектно-ориентированный стиль (метод):

public bool SQLiteDatabase::queryExec ( string $query [, string &$error_msg ] )

Выполняет запрос query к базе данных, идентификатор которой задан аргументом dbhandle.

Внимание

SQLite выполнит несколько запросов, разделенных точкой с запятой, за один вызов функции. Это можно использовать, например, для выполнения запросов, прочитанных из файла.

Список параметров

dbhandle

Ресурс базы данных SQLite, полученный из функции sqlite_open() в случае использования процедурного подхода. Этот параметр не требуется при использовании объектно-ориентированного подхода.

query

Выполняемый запрос.

Данные в запросе должны быть корректно проэкранированы.

error_msg

Данная переменная будет заполнена текстом ошибки, если таковая произойдет. Это особенно важно, потому что синтаксические ошибки SQL не могут быть получены из функции sqlite_last_error().

Замечание: Поддерживаются два альтернативных синтаксиса для совместимости с другими расширениями баз данных (например, MySQL). Предпочитаемая форма - первая, в которой параметр dbhandle является первым параметром функции.

Возвращаемые значения

Это функция возвращает булевый результат: TRUE в случае успеха и FALSE в случае ошибки. Если вам необходимо запустить запрос, возвращающий результат, используйте функцию sqlite_query().

Имена столбцов, возвращаемые SQLITE_ASSOC и SQLITE_BOTH, будут приведены к нужному регистру согласно значению конфигурационной опции sqlite.assoc_case.

Список изменений

Версия Описание
5.1.0 Добавлен параметр error_msg

Примеры

Пример #1 Пример с использованием процедурного стиля

<?php
$dbhandle 
sqlite_open('mysqlitedb');
$query sqlite_exec($dbhandle"UPDATE users SET email='jDoe@example.com' WHERE username='jDoe'"$error);
if (!
$query) {
    exit(
"Ошибка в запросе: '$error'");
} else {
    echo 
'Количество затронутых рядов: 'sqlite_changes($dbhandle);
}
?>

Пример #2 Object-oriented example

<?php
$dbhandle 
= new SQLiteDatabase('mysqlitedb');
$query $dbhandle->queryExec("UPDATE users SET email='jDoe@example.com' WHERE username='jDoe'"$error);
if (!
$query) {
    exit(
"Ошибка в запросе: '$error'");
} else {
    echo 
'Количество затронутых рядов: '$dbhandle->changes();
}
?>

Смотрите также

  • sqlite_query() - Выполняет запрос к базе данных и возвращает идентификатор результата
  • sqlite_unbuffered_query() - Выполняет запрос без буферизации результатов
  • sqlite_array_query() - Выполняет запрос к базе данных и возвращает результат в виде массива

add a note add a note

User Contributed Notes 2 notes

up
1
nonproffessional at clockworkgeek dot com
9 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
-1
rrf5000 at psu dot edu
10 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