可以返回下一行。 mysql_fetch_array($result) 这个函数和另外两个fetch函数基本相同,只是它以一个联合数组的形式返回一个行($field1 = $var["field1"];)。 Postgres pg_numrows($result) 与对应的mysql_num_rows($result)完全一样 pg_cmdtuples($result) 与对应的mysql_affected_rows($result)完全一样 pg_fetch_object($result, $row) 获得结果集中的指定行。必须使用$row</CODE>参数,而且没有一个内部的计数器。除此之外,它与mysql_fetch_object($result)完全相同。
上一页 [1] [2] [3] [4] 下一页
pg_fetch_row($result, $row) 以一个数组的形式返回结果集中的指定行。同样必须使用$row参数,而且没有一个内部的计数器。 pg_fetch_array($result, $row) 与对应的mysql_fetch_array($result)基本一样,只是需要指定行,并且缺少一个内部的计数器。 有关这些函数的更详细的信息,请参看PHP.Net上的PHP文档。 PHP对MySQL和Postgres支持的最本质的不同在于对结果集的阅读。MySQL自动决定获取哪一行,而Postgres必须指定要阅读哪一行。下面是一些例子,你也可能会遇到这些问题,对于它们有两个解决方案。 //第一个普通的例子: $rslt=mysql_query("SELECT * FROM blah", $connection_id); while($value=mysql_fetch_array($rslt)) { //完成数据处理工作 } //对于Postgres,这样的代码无法执行,因为他们需要指定行号 //代码将作如下改动(如果你没有使用前面讨论的函数): $rslt=pg_exec($connection_id, "SELECT * from blah"); $limit=pg_numrows($rslt); for($rownum=0;$rownum<$limit;$rownum++) { $value=pg_fetch_array($rslt, $rownum); //完成处理工作 } 在上面的例子中,你可以注意到Postgres的代码要稍微长一点,这是因为你必须指定行号。然而,如果你使用了你编写的自己的计数函数,问题就变得很简单了。这儿是一个添加了这样一个函数的有用的文件。请注意在postg_query()中使用了三个全局变量。 <?php // /usr/local/lib/php/mysite/configfile.php $hostname = "localhost"; $username = "username"; $database = "mydb"; $password = "mypasswd"; //内部计数变量 $fetch_array_counter=0; $fetch_object_counter=0; $fetch_row_counter=0; //处理连接到PostgreSQL数据库的函数 function postg_connect($hostname, $username, $password, $database) { return pg_connect(host=$hostname, dbname=$database user=$username, password=$password"); } //不需要任何参数的连接 function postg_autoconnect() { global $hostname, $username, $password, $database; return pg_connect(host=$hostname, dbname=$database user=$username, password=$password"); } //查询函数 function postg_query($query, $connection_id) { //将全局变量设置为0 global $fetch_array_counter, $fetch_row_counter, $fetch_object_counter; $fetch_array_counter=$fetch_row_counter=$fetch_object_counter=0; return pg_exec($connection_id, $query); } //pg_fetch_array()置换 function postg_fetch_array($rslt) { global $fetch_array_counter; $fetch_array_counter++; //计数器加一 return pg_fetch_array($rslt, $fetch_array_counter); } //pg_fetch_row()置换 function postg_fetch_row($rslt) { global $fetch_row_counter; $fetch_row_counter++; //计数器加一 return pg_fetch_row($rslt, $fetch_row_counter); } //pg_fetch_object()置换 function postg_fetch_object($rslt) { global $fetch_object_counter; $fetch_object_counter++; //计数器加一 return pg_fetch_object($rslt, $fetch_object_counter); } ?> 当然,如果你在同一个循环中同时对两个结果集进行操作,上面的函数将无法正常地工作,因为它们只使用了一个内部的计数器。如果因为某种原因,你需要同时阅读几个结果集,你将不得不使用传统的Postgres方法。 另一个你可能遇到的问题是在Postgres中没有与MySQL中mysql_insert_id()相应的函数,这个函数反映最后的INSERT查询的索引值。PHP文档往往会让读者误以为pg_getlastoid()会完成这项工作,但是实际情况并不是这样。缺少这一样一个函数并不一个无法逾越的障碍,你可以利用Postgres的SEQUENCE系统来实现这样的功能。 幸运的是,要获得最后的ID是相当容易的。你可以通过SQL获得Sequence信息,因此你可以用这个语句来实现mysql_insert_id()的功能: function postg_insert_id($tablename, $fieldname) { global connection_id; $result=pg_exec($connection_id, "SELECT last_value FROM ${tablename}_ ${fieldname}_seq"); $seq_array=pg_fetch_row($result, 0); return $seq_array[0]; } 因为Postgres使 上一页 [1] [2] [3] [4] [5] 下一页
|