• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • SQLite3::query()

    (PHP 5 >= 5.3.0, PHP 7)

    Executes an SQL query

    说明

    publicSQLite3::query(string $query): SQLite3Result

    Executes an SQL query, returning an SQLite3Result object. If the query does not yield a result(such as DML statements)the returned SQLite3Result object is not really usable. Use SQLite3::exec() for such queries instead.

    参数

    $query

    The SQL query to execute.

    返回值

    Returns an SQLite3Result object,或者在失败时返回FALSE.

    范例

    SQLite3::query() example

    <?php
    $db = new SQLite3('mysqlitedb.db');
    $results = $db->query('SELECT bar FROM foo');
    while ($row = $results->fetchArray()) {
        var_dump($row);
    }
    ?>
    
    The recommended way to do a SQLite3 query is to use a statement. For a table creation, a query might be fine (and easier) but for an insert, update or select, you should really use a statement, it's really easier and safer as SQLite will escape your parameters according to their type. SQLite will also use less memory than if you created the whole query by yourself. Example:
    <?php
    $db = new SQLite3;
    $statement = $db->prepare('SELECT * FROM table WHERE id = :id;');
    $statement->bindValue(':id', $id);
    $result = $statement->execute();
    ?>
    You can also re-use a statement and change its parameters, just do $statement->reset(). Finally don't forget to close a statement when you don't need it anymore as it will free some memory.
    Check with SQLite3Result::numColumns() for an empty result before calling SQLite3Result::fetchArray().
    In contrast to the documentation SQLite3::query() always returns a SQLite3Result instance, not only for queries returning rows (SELECT, EXPLAIN). Each time SQLite3Result::fetchArray() is called on a result from a result-less query internally the query is executed again, which will most probably break your application.
    For a framwork or API it's not possible to know in before whether or not a query will return rows (SQLite3 supports multi-statement queries). Therefore the argument "Don't execute query('CREATE ...')" is not valid.