sqlite_field_name
(PHP 5, PECL sqlite:1.0-1.0.3)
sqlite_field_name — Возвращает имя указанного поля результата запроса
Описание
string sqlite_field_name
( resource $result
, int $field_index
)
Возвращает имя поля результата запроса result с порядковым номером field_index.
- 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
Коментарии
While working with SQLite using its object-oriented mode, I found need to display a column/field name without knowing what it was in advance. I couldn't find any examples on the Internet, just this document. So, for anyone who happens to need to do this, here's an example.
<?php
$db = "db/database.sqlite";
// create new database (OO interface)
$dbo = new SQLiteDatabase("$db");
// create table foo and insert sample data
$dbo->query("
CREATE TABLE foo(id INTEGER PRIMARY KEY, name CHAR(255));
INSERT INTO foo (name) VALUES('Ilia1');
INSERT INTO foo (name) VALUES('Ilia2');
INSERT INTO foo (name) VALUES('Ilia3');
");
$query = "SELECT * FROM foo;";
$result = $dbo->query($query) or die("Error in query");
echo "
<table border='1' cellpadding='10'>
<tr>
<td>".$result->fieldName(0)."</td>
<td>".$result->fieldName(1)."</td>
</tr>";
// iterate through the retrieved rows
while ($result->valid()) {
// fetch current row
$row = $result->current();
echo "
<tr>
<td>".$row[0]."</td>
<td>".$row[1]."</td>
</tr>";
// proceed to next row
$result->next();
}
echo "</table>";
?>
It's not the most elegant way, but it works:
<?php
function sqlite_field_names($db, $tablename){
$sq5=sqlite_single_query($db, "SELECT sql FROM sqlite_master WHERE tbl_name='".$tablename."'", SQLITE_NUM);
$kommando=$sq5[0];
$cut=strtok($kommando,"(");
while($fieldnames[]=strtok(",")) {};
array_pop($fieldnames);
foreach($fieldnames as $no => $field)
if (strpos($field, "PRIMARY KEY")){
strtok($field,"(");
$primary=strtok(")");
unset($fieldnames[$no]);
} else
$fieldnames[$no]=strtok($field, " ");
return $fieldnames;
}
?>
This code works with SQlite version 3 databases.
<?php
function sqlite_field_names($dbfile, $tablename){
try
{
$db = new PDO("sqlite:".$dbfile);
$sql=$db->query("SELECT sql FROM sqlite_master WHERE tbl_name='".$tablename."'");
foreach($sql as $row)
{
$fields = $row["sql"];
}
$db = NULL;
}
catch(PDOException $e)
{
print "Exception : ".$e->getMessage();
}
$cut=strtok($fields,"(");
while($fieldnames[]=strtok(",")) {};
array_pop($fieldnames);
foreach($fieldnames as $no => $field)
if (strpos($field, "PRIMARY KEY")){
strtok($field,"(");
$primary=strtok(")");
unset($fieldnames[$no]);
} else
$fieldnames[$no]=strtok($field, " ");
return $fieldnames;
}
print_r(array_values(sqlite_field_names($dbfile, $tablename)));
?>