On Mon, 04 Feb 2008 10:46:53 +0100, Gilles
<[EMAIL PROTECTED]> wrote:
>Hello
>
> I'd like to display the column names as headers in an HTML table.
>
> 1. I need to retrieve the column names, but the following doesn't work:
>
> # cat cols.php
> <?php
> $dbh = new
> PDO("sqlite:db.sqlite");
>
> $sql = ".header ON";
> $dbh->exec($sql);
>
> $sql = "SELECT * FROM customer";
> $row = $dbh->query($sql)->fetch();
> foreach ($row as $col) {
> print $col . "<P>\n";
> }
>
> $sql = ".header OFF";
> $dbh->exec($sql);
>
> $dbh = null;
>?>
You can't use the dot commands with the SQLite
library, they are only valid in the command line tool.
Here is a method in my sqlitedb class,
<?php
/* sqlitedb class */
class sqlitedb extends PDO {
// left out function __construct(){} etc.
/**
* Print ($caption,$sql,FALSE) or
* return ($caption,$sql,TRUE) an HTML table
* representing the full resultset from the
* query in $sql (non-paging) in row/column
* representation.
* Requires classes in css for every datatype
* that might be returned, like:
.datetime { text-align: right; }
.integer { text-align: right; }
.text { text-align: left; }
.varchar { text-align: left; }
.string { text-align: left; }
*
*/
function HTMLtable($caption,$sql,$ReturnString =
FALSE){
$res = $this->query($sql);
if ($res){
if ($row = $res->fetch()){
$nrofcols = $res->columnCount();
if ($nrofcols > 0){
$ret = sprintf('<table
summary="tableview"><caption>%s</caption>
',$caption);
// column horizontal alignment according to type
for ($i = 0;$i < $nrofcols;$i++){
$metadata =
$res->getColumnMeta($i);
reset($metadata);
$class = preg_replace(
array('/[)(0-9]*/')
,array("")
,strtolower(
(array_key_exists ( 'sqlite:decl_type', $metadata )
)?$metadata['sqlite:decl_type']:$metadata['native_type']
));
$ret .= sprintf(' <colgroup
span="1" class="%s"></colgroup>%s',$class,"\n");
}
$ret .= ' <tr>';
// column headings
for ($i = 0;$i < $nrofcols;$i++){
$metadata =
$res->getColumnMeta($i);
$ret .= sprintf(
'<th>%s</th>',$metadata['name']);
}
$ret .= "</tr>\n";
// table rows
while ($row){
$ret .= ' <tr>';
for ($i = 0;$i <
$nrofcols;$i++){
// column data
$ret .=
sprintf('<td>%s</td>',$row[$i]);
}
$ret .= "</tr>\n";
$row = $res->fetch();
}
$ret .= '</table>';
} else {
$ret = 'no columns';
}
} else {
$ret = 'no data';
}
} else {
$ret = 'no table';
}
if ($ReturnString){
return $ret;
} else {
print $ret;
unset($ret);
}
} // HTMLtable()
} // end class sqlitedb
?>
> 2. Additionally, if possible, I'd like to
> display a user-friendly name
> instead of the names I use internally.
<?php
print '<tr><th>col1name</th><th>col2name</th></tr>'
?>
You could fetch the column names from a 'dictionary'
table in your database:
CREATE TABLE Friendlynames (
tablenm TEXT NOT NULL,
columnnm TEXT NOT NULL,
friendlynm TEXT NOT NULL,
PRIMARY KEY (tablenm,columnnm)
);
> Does someone have some code handy?
>
>Thank you.
HTH
--
( Kees Nuyt
)
c[_]
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users