©
このドキュメントでは、 php中国語ネットマニュアル リリース
(PHP 5 >= 5.3.0)
SQLite3::exec — Executes a result-less query against a given database
$query
)Executes a result-less query against a given database.
query
The SQL query to execute (typically an INSERT, UPDATE, or DELETE query).
Returns TRUE
if the query succeeded, FALSE
on failure.
Example #1 SQLite3::exec() example
<?php
$db = new SQLite3 ( 'mysqlitedb.db' );
$db -> exec ( 'CREATE TABLE bar (bar STRING)' );
?>
[#1] namibj [2014-10-27 14:52:44]
If you use WAL (Write-Ahead Log) (link to sqlite doc for this: http://sqlite.org/wal.html ), it needs write acces because of the implementation of multi-thread access to one db. You can turn it off, if you do not want to give the dir write access, but you can also create a certain file it needs (see the link for a description, as it is explained very well there) that you need write access to and you may get away using WAL without giving write accesss to the dir.
[#2] Rob Haverkort [2013-11-03 19:57:01]
Actually, sqlite creates a journal-file when changing data and so it needs the write-permissions in the directory.
[#3] gamag [2013-03-06 21:02:12]
SQLite needs to create some temp-files (journals...) to execute certain statements, so php needs write-permission in your db-directory.
[#4] info at tellmatic dot org [2013-01-16 15:50:26]
IMPORTANT! just a note:
weird behaviour when doing an exec on a sqlite db!!!
if want to execute a query on a sqlite db with exec, and your dbfile already was e.g. mode 777, and you get some php errors saying
"SQLite3::exec(): unable to open database file in ...."
and you get crazy while debugging, just add write ??ermissions to the whole directory for the user the webserver/php runs.
this behaviour makes absolutely NO sense, and is a source of frustration.
at least a more meaningful errormessage would be nice.
i couldnt figure out why sqlite needs write permissions for the whole dir instead of only one file. this is stupid and must be a bug!
(to be secure you have to create a directory with write permissions only for php/apache)
[#5] moodsey211 at gmail dot com [2010-12-16 15:29:10]
If you get the error message saying "SQLite3::exec. database locked." You just need to define a busyTimeout to work around this.