sqlite_exec
SQLiteDatabase::exec
(PHP 5 < 5.4.0, PECL sqlite >= 1.0.3)
sqlite_exec -- SQLiteDatabase::exec — Выполняет запрос, не возвращающий записей
Описание
$dbhandle
, string $query
[, string &$error_msg
] )$query
, resource $dbhandle
)Объектно-ориентированный стиль (метод):
$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() - Выполняет запрос к базе данных и возвращает результат в виде массива
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Расширения для работы с базами данных
- Расширения для работы с базами данных отдельных производителей
- SQLite
- sqlite_array_query
- sqlite_busy_timeout
- sqlite_changes
- sqlite_close
- sqlite_column
- sqlite_create_aggregate
- sqlite_create_function
- sqlite_current
- sqlite_error_string
- sqlite_escape_string
- sqlite_exec
- sqlite_factory
- sqlite_fetch_all
- sqlite_fetch_array
- sqlite_fetch_column_types
- sqlite_fetch_object
- sqlite_fetch_single
- sqlite_fetch_string
- sqlite_field_name
- sqlite_has_more
- sqlite_has_prev
- sqlite_key
- sqlite_last_error
- sqlite_last_insert_rowid
- sqlite_libencoding
- sqlite_libversion
- sqlite_next
- sqlite_num_fields
- sqlite_num_rows
- sqlite_open
- sqlite_popen
- sqlite_prev
- sqlite_query
- sqlite_rewind
- sqlite_seek
- sqlite_single_query
- sqlite_udf_decode_binary
- sqlite_udf_encode_binary
- sqlite_unbuffered_query
- sqlite_valid
Коментарии
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.
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".