Thread: 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