Re: files, php & pgsql - Mailing list pgsql-php

From Dave Perkins
Subject Re: files, php & pgsql
Date
Msg-id 3.0.6.32.20001018135652.007b0720@shell1.shore.net
Whole thread Raw
In response to files, php & pgsql  (Chris <tomcat@weirdness.com>)
List pgsql-php
Chris,

Try enclosing your call to pg_loreadall() in a transaction block as you do
for pg_lowrite(). Without pg_exec("begin") . . . pg_exec("commit") and
pg_exec("end")
PHP reports "0 is not a PostgreSQL large object index" when calling
pg_loreadall().

Also, pg_loreadall() is looking for a "file descriptor" and it appears that
you are passing it an 'oid'.

I was able to get the following test to work on PostgreSQL 6.5 using PHP3.

database name: images
table name: images
______________________
    field  |   type  |
-----------+---------+
  picnum   |  serial |
  image    |  oid    |
----------------------

<?
$db=pg_connect("","","","","images");

pg_exec ($db,"begin");
$loid = pg_locreate($db);
$lofp = pg_loopen($db, $loid, "rw");
$strWrite = "test";
pg_lowrite($lofp,$strWrite);
$sql = "insert into images(picnum,image)
values(nextval('images_picnum_seq'),'$loid')";
$res = pg_exec($db,$sql);
pg_loclose($lofp);
pg_exec($db, "commit");
pg_exec($db, "end");

$res = pg_exec($db,"SELECT * FROM images");
$row = pg_fetch_object($res,0);

pg_exec ($db,"begin");
$lofp = pg_loopen($db, $row->image, "rw");
?>
<HTML>
<BODY>
<?
pg_loreadall($lofp);
pg_loclose($lofp);
pg_exec($db, "commit");
pg_exec($db, "end");
pg_close($db);
?>
</BODY>
</HTML>

Regards,
Dave


At 08:45 PM 10/18/00 +1000, you wrote:
>I've been thinking the same that the list is dead (or my mail was stuffed)
>but now I see it's not the case :)
>
>I do have a problem (!!), and its trying to get files (of any type) to work
>with pgsql & php. I'm using pgsql 7.0.2, php4.
>
>Anyone have any hints?
>
>Chris.
>
>Here's the form I use to upload the files..
><form enctype="multipart/form-data" name="fileinsert"
>action="file-insert.php" method="post">
><input type="hidden" name="max_file_size" value="10000">
><input type="file" size="35" name="userfile"><BR>
><input type="submit" value="Upload It" name="uploadfile">
>
>I upload the files like this....
><?php
>$db=pg_connect("","","","","images");
>$fp=fopen("$userfile","r");
>pg_exec ($db,"begin");
>$loid = pg_locreate($db);
>$lofp = pg_loopen($db, $loid, "w");
>while ($nbytes = fread ($fp, BUFSIZE))
>{
>$tmp = pg_lowrite($lofp, $nbytes);
>if ($tmp < $nbytes) echo "Error writing the file";
>}
>$sql = "insert into images (picnum, image) values
>(nextval('images_picnum_seq'), '$loid')";
>pg_exec($db,$sql);
>pg_loclose($lofp);
>pg_exec($db, "commit");
>fclose($fp);
>echo "done";
>pg_close($db);
>?>
>
>I list the files like this..
>$db = pg_connect("","","","","images");
>$sql = "select * from images";
>$result = pg_exec($db, $sql);
>if (!$result) {printf ("error"); }
>$totalrows = pg_numrows($result);
>$row=0;
>do
>{
>$myrow = pg_fetch_object($result,$row);
>$image_oid = $myrow->picnum;
>echo "this is my image <img src=\"blob2jpg.php?image=$image_oid\"
>border=0><br>";
>$row++;
>}while ($row < $totalrows);
>echo $pic;
>?>
>
>I (try to) display the files like this....
><?
>$db=pg_connect("","","","","images");
>$sql="select * from images where picnum=$picnum";
>$result=pg_exec($db,$sql);
>if (!$result) { printf ("error"); }
>Header("Content-type: image/gif");
>$myrow = pg_fetch_object($result,0);
>$image = $myrow->image;
>pg_loreadall($image);
>pg_close($db);
>?>
>
>and finally my database..
>images=# \d images
>         Table "images"
>  Attribute |  Type   |      Modifier
>-----------+---------+-------------------------------
>  picnum  | integer | not null default......
>  image    | oid       |
>
>


pgsql-php by date:

Previous
From: "Adam Lang"
Date:
Subject: Re: files, php & pgsql
Next
From: Chris
Date:
Subject: Re: files, php & pgsql