sqlite_fetch_single
SQLiteResult::fetchSingle
SQLiteUnbuffered::fetchSingle
(PHP 5 < 5.4.0, PECL sqlite >= 1.0.1)
sqlite_fetch_single -- SQLiteResult::fetchSingle -- SQLiteUnbuffered::fetchSingle — Fetches the first column of a result set as a string
Description
$result
[, bool $decode_binary
= true
] )Object oriented style (method):
$decode_binary
= true
] )$decode_binary
= true
] )sqlite_fetch_single() is identical to sqlite_fetch_array() except that it returns the value of the first column of the rowset.
This is the most optimal way to retrieve data when you are only interested in the values from a single column of data.
Parameters
-
result
-
The SQLite result resource. This parameter is not required when using the object-oriented method.
-
decode_binary
-
When the
decode_binary
parameter is set toTRUE
(the default), PHP will decode the binary encoding it applied to the data if it was encoded using the sqlite_escape_string(). You should normally leave this value at its default, unless you are interoperating with databases created by other sqlite capable applications.
Return Values
Returns the first column value, as a string.
Examples
Example #1 A sqlite_fetch_single() example
<?php
if ($dbhandle = sqlite_open('mysqlitedb', 0666, $sqliteerror)) {
$sql = "SELECT id FROM sometable WHERE id = 42";
$res = sqlite_query($dbhandle, $sql);
if (sqlite_num_rows($res) > 0) {
echo sqlite_fetch_single($res); // 42
}
sqlite_close($dbhandle);
}
?>
- 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
Коментарии
Be careful with the use of sqlite_fetch_single() in a while-loop:
<?php
$result = sqlite_query($db_handle, 'SELECT foo FROM bar;');
while ($row = sqlite_fetch_single($result)) {
/*...do s.th. with $row...*/
}
?>
This may not work as expected because the loop will stop if any of the foos has a false value (e.g. zero).
Use sqlite_has_more() instead:
<?php
$result = sqlite_query($db_handle, 'SELECT foo FROM bar;');
while (sqlite_has_more($result)) {
$row = sqlite_fetch_single($result);
/*...do s.th. with $row...*/
}
?>
It isnt specified in the above description for this function, but yes this function will not only return the first column, but it will also return the first value (ie from the first row in the result set) of that column. Also the result set pointer is involved here in that if you use sqlite_fetch_single in a loop, it will return each value in the first column sequentially and advance the result set pointer each time.
i.e. the first loop iteration it returns the first value in the first column. the second loop iteration it returns the second value in the first column. the third loop iteration the third value and so on.
$handle = sqlite_open("database_file_name") or die("Could not open database");
//generate query string
$query = "select distinct field1 from database_name";
//execute query
$result = sqlite_query($handle,$query)
//if a row exists
if(sqlite_num_rows($result)>0){
echo "<table cellpadding=\"10\" border=\"1\">";
//check for more rows
while(sqlite_has_more($result)){
//get first field from each row
//print values
$row=sqlite_fetch_single($result);
echo "<tr>";
echo "<td>".$row."</td>";
echo "</tr>";
}
echo "</table>";
}
//close database file
sqlite_close($handle);
With the help of sqlite_fetch_single, you can quickly and easily calculate the number of elements in the table
<?php
// create new database (OO interface)
$db = new SQLiteDatabase('database.db', 0666);
// create table inbox and paste data
$db->queryExec("
CREATE TABLE inbox (
inbox_id INTEGER NOT NULL PRIMARY KEY,
inbox_send varchar(20) NOT NULL,
inbox_text TEXT NOT NULL,
inbox_time INTEGER UNSIGNED NOT NULL,
inbox_user varchar(20) NOT NULL
);");
$ins_query = "
INSERT INTO inbox (inbox_send, inbox_text, inbox_time, inbox_user) VALUES ('Ilia1', 'Message1', '".time()."', 'my_name');
INSERT INTO inbox (inbox_send, inbox_text, inbox_time, inbox_user) VALUES ('Ilia2', 'Message2', '".time()."', 'user');
INSERT INTO inbox (inbox_send, inbox_text, inbox_time, inbox_user) VALUES ('Ilia2', 'Message3', '".time()."', 'my_name');
";
$db->queryExec($ins_query);
//view all posts by my_name
$total = $db->singleQuery("SELECT count(*) FROM inbox WHERE inbox_user='my_name';");
echo $total;
// the result will be the number 2
/* P.S. sorry for my english */
?>