PHP and PostgreSQL question on identifier limits.
Hello,
I am migrating from MySQL to PostgreSQL and ran into a limitation of
PostgreSQL. I ran into this because of a technique I use for displaying
results of a SELECT query. In some cases I like to have the heading of some
columns in the table be clickable, usually to sort output by that column.
I have common a function I use that displays the results of a query in an HTML
table with the column headings being the field names. Here is a snippet of
code showing a typical query:
=======================================================
$_GET['sort'] && $_SESSION['sort']=$_GET['sort'];
$sort=$_SESSION['sort'];
$sort || $sort="field1";
$query="SELECT
field1 AS \"<a href=$PHP_SELF?sort=field1>field1</a>\",
field2 AS \"<a href=$PHP_SELF?sort=field2>field2</a>\",
field3 AS \"<a href=$PHP_SELF?sort=userid>field3</a>\"
FROM my_table ORDER BY $sort";
$tbl=new Table($query);
$tbl->print();
=======================================================
The problem I ran into is when the "AS" exceeds 63 characters --- which it
does NOT in the above example, but sometimes DOES in more complex real-life
queries. In those cases I get a PostgreSQL error saying that the identifier
is too long. Looking at the PostgreSQL documentation I see this is set to 63
characters by default but can be changed with a recompile.
Before I recompile PostgreSQL I would like to re-think my strategy for making
column headings clickable links.
Does anyone else create HTML tables with clickable headers? If so, do you use
a similar or different technique?
--
Robert C. Paulsen, Jr.
robert@paulsenonline.net
Hi,
$_GET['sort'] && $_SESSION['sort']=$_GET['sort'];
$sort=$_SESSION['sort'];
$sort || $sort="field1";
First of all I don't feel very comfortable with this exotic syntax, but
this is not the right place to discuss about it ;)
$query="SELECT
field1 AS \"<a href=$PHP_SELF?sort=field1>field1</a>\",
field2 AS \"<a href=$PHP_SELF?sort=field2>field2</a>\",
field3 AS \"<a href=$PHP_SELF?sort=userid>field3</a>\"
FROM my_table ORDER BY $sort";$tbl=new Table($query);
$tbl->print();
Is there a good reason why you don't add hyperlinks inside your Table
class, instead than using column names for such a purpose?
P.S.
Handling column sorting like you're doing is a big security risk! I hope
you are doing some more checks on $sort, otherwise SQL injection attacks
would be very easy to do.
Best regards
--
Matteo Beccati
http://phpadsnew.com/
http://phppgads.com/
On Sunday 15 August 2004 06:58 pm, Matteo Beccati wrote:
Hi,
$_GET['sort'] && $_SESSION['sort']=$_GET['sort'];
$sort=$_SESSION['sort'];
$sort || $sort="field1";First of all I don't feel very comfortable with this exotic syntax, but
this is not the right place to discuss about it ;)
I guess "exotic" depends on your background.
$query="SELECT
field1 AS \"<a href=$PHP_SELF?sort=field1>field1</a>\",
field2 AS \"<a href=$PHP_SELF?sort=field2>field2</a>\",
field3 AS \"<a href=$PHP_SELF?sort=userid>field3</a>\"
FROM my_table ORDER BY $sort";$tbl=new Table($query);
$tbl->print();Is there a good reason why you don't add hyperlinks inside your Table
class, instead than using column names for such a purpose?
That might be the best solution. This code has evolved from a time before I
was using classes. Used to be a simple function call. With classes I could
add the ability to assign links to the headers.
P.S.
Handling column sorting like you're doing is a big security risk! I hope
you are doing some more checks on $sort, otherwise SQL injection attacks
would be very easy to do.
Good point. Using your suggestion about implementing this inside the Table
class will make this easier to control.
--
Robert C. Paulsen, Jr.
robert@paulsenonline.net