sqlite_query

(PHP 5, PECL sqlite:1.0-1.0.3)

sqlite_query — Выполняет запрос к базе данных и возвращает идентификатор результата

Описание

resource sqlite_query ( resource $dbhandle , string $query )
resource sqlite_query ( string $query , resource $dbhandle )

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

Эта функция возвращает идентификатор результата запроса или FALSE в случае ошибки. Для запросов, возвращающих данные, этот идентификатор может использоваться в качестве аргумента таких функций как sqlite_fetch_array() или sqlite_seek().

Независимо от типа запроса, в случае возникновения ошибки эта функция возвращает FALSE.

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

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

Внимание

SQLite выполняет несколько запросов, разделенных точкой с запятой, что можно использовать, например, для выполнения запросов, прочитанных из файла. Однако, если хотя бы один из запросов должен возвращать набор записей (SELECT), то будет выполнен только первый запрос. Функция sqlite_exec() всегда выполняет все запросы.

При выполнении нескольких запросов, эта функция возвращает FALSE в случае ошибки, иначе возвращается либо TRUE, либо идентификатор результата запроса.

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

sqlite_unbuffered_query() and sqlite_array_query().

Коментарии

The function below allows you to submit multiple queries in one shot to a SQLITE database, and will return whatever you would get for the final query.

function sqlite_query_multi ($db, $query) {
    // submit multiple queries (separated by ;) to $db
    // and return the result from the last one
    $multiSQL = "/('[^']*'|\"[^\"]*\"|[^;'\"])*;/";
    preg_match_all ($multiSQL, "$query;", $aSQL);
    for ($i=sizeof($aSQL=$aSQL[0]);$i--;)
    if (!($trim=trim(substr($aSQL[$i],0,-1))))
        unset ($aSQL[$i]);
        else $aSQL[$i] = "$trim;";
    foreach ($aSQL as $i => $sql)
    $dbRes = sqlite_query ($db, $sql);
    return (@$dbRes);
}

The section below illustrates the above function:

$db = sqlite_open(":memory:", 0666, $sqliteerror);
$query = <<<EOD
CREATE TABLE foo (bar INTEGER PRIMARY KEY, baz TEXT);
INSERT INTO foo VALUES (Null, 'Hi');
INSERT INTO foo VALUES (Null, 'Mom');
SELECT * FROM foo;
EOD;
$dbRes = sqlite_query_multi ($db, $query);  // 4 statements
while (sqlite_has_more($dbRes))
    var_dump(sqlite_fetch_array($dbRes, SQLITE_ASSOC));

Csaba Gabor
2004-04-29 21:41:59
http://php5.kiev.ua/manual/ru/function.sqlite-query.html
Автор:
While reading the manual at sqlite.org, I can answer for the quotes in strings. You should put two quote to get one. 

insert into atable values ( '5 O''Clock');
2004-10-05 04:54:23
http://php5.kiev.ua/manual/ru/function.sqlite-query.html
sqlite_open will return NULL if the web server cannot write to the sqlite database file.

I saw the following message in my web server error log:

PHP Warning:  sqlite_query(): (null) ...

It turns out that the sqlite database file was owned by a user other than the one the web server was running as.  In my case, it was a Linux system running Apache (which was running under the context of user apache).  The sqlite database file was owned by root.  I changed ownership of the file to user apache and now it works!  The sqlite_open call now returns a valid result handle.

Jason Aeschilman
2005-10-24 12:35:50
http://php5.kiev.ua/manual/ru/function.sqlite-query.html
Correction:

sqlite_query will return NULL if the web server cannot write to the sqlite database file.

(please correct the previous post and delete this one)
2005-10-27 10:32:41
http://php5.kiev.ua/manual/ru/function.sqlite-query.html
I suppose this could be useful for users attempting to use a sqlite database for the first time.
<?php
$database 
= new SQLiteDatabase($yourfile0666$error);
if (!
$database) {
   
$error = (file_exists($yourfile)) ? "Impossible to open, check permissions" "Impossible to create, check permissions";
    die(
$error);
}
$query $database->query("SELECT name FROM sqlite_master WHERE type='table'"SQLITE_ASSOC$query_error); #Lists all tables
if ($query_error)
    die(
"Error: $query_error"); #This means that most probably we catch a syntax error
if (!$query)
    die(
"Impossible to execute query."#As reported above, this means that the db owner is different from the web server's one, but we did not commit any syntax mistake.
print $query->numRows();
while (
$row $query->fetch())
    print(
$row['name']."\n");
?>
i suppose that the example above is also useful because it will list all the tables created, giving also comprehension of what appens when managing a sqlite database in OO mode.
2008-02-05 03:58:28
http://php5.kiev.ua/manual/ru/function.sqlite-query.html
In follow up to Csaba Gabor's function (see below) that allows for multi-statement queries to be executed via sqlite_query() this alternative implementation avoids a problem with Csaba's version (which prevents multi-statement constructs like CREATE TRIGGER from being parsed correctly).
<?php 
function sqlite_query_multi ($db$query) { 
 
//
 // sqlite_query() rewritten to support concatenated SQL statements.
 //
 // This method works around the sqlite_query() deficiency by splitting
 // queries into two parts; the first part comprising all the statements
 // except the last one (executed via sqlite_exec) and then the last
 // statement (executed via sqlite_query).
 //
 // This allows the result of the last SELECT statement in a multi-statement
 // query to be accessed regardless of the SQL statements that came before it. 
 // It also allows execution of arbitrary multi-statement programs regardless
 // whether the result is needed, subject to the following constraint:
 //
 // This method requires that the last statement in a multi-statement query
 // is a valid "stand-alone" SQL statement. If it is not (eg, the "END;" of
 // a multi-statement construct such as CREATE TRIGGER) append an additional
 // ";" (ie, a NULL statement). Normally this should not be needed because
 // almost all the multi-statement constructs I can think of should have a
 // stand-alone statement following them (ie, to makes use of the construct).
 //
   
$pattern '/^(.*;)(.*;)/s';
    if ( 
preg_match($pattern,$query,$match) ) { 
     
// multi-statement query
       
sqlite_exec($db,$match[1]);
       
$result sqlite_query($db,$match[2]);
    } else { 
     
// single-statement query
       
$result sqlite_query($db,$query);
    }
    return (@
$result);
}
?>
2009-08-05 02:11:44
http://php5.kiev.ua/manual/ru/function.sqlite-query.html
Not a lot of examples on using the oo style of using sqlite files.  Maybe this helps someone trying to figure out all the names of the tables inside an sqlite file.

<?php

/* Just extend the class, add our method */
class MySQLiteDatabase extends SQLiteDatabase {

   
/* A neat way to see which tables are inside a valid sqlite file */
   
public function getTables()  {
     
$tables=array();
     
$q $this->query(sprintf("SELECT name FROM sqlite_master WHERE type='table' ORDER BY name"));
     
$result $q->fetchAll();
      foreach(
$result as $tot_table) {
         
$tables[]=$tot_table['name'];
      }
      return(
$tables);
   }
}

/* a sqlite file */
$database="BLAHBLAH.sqlite";

if (
file_exists($database)) {
   
$db = new MySQLiteDatabase($database0666$err);
   if (
$err) {
     
trigger_error($err);
   } else {
     
print_r($db->getTables());
   }
}

/* this sqlite db had 2 tables:
   Array
   (
   [0] => Account
   [1] => Device
   )

 */
?>
2012-01-13 07:16:55
http://php5.kiev.ua/manual/ru/function.sqlite-query.html

    Поддержать сайт на родительском проекте КГБ