php - 从oracle中选择记录

标签 php sql oracle

要选择最后一条记录,当我的数据库是 MySQL 时,我正在使用它:

$result = mysql_query("SELECT Id 
                         FROM test 
                     ORDER BY LENGTH(Id), Id ASC");

$count = mysql_numrows($result);

if($count != 0) {    
  $lastid = mysql_result($result,$count-1,"Id");    
}

...它工作正常。
但是现在我的表在 Oracle 数据库中 - 我写道:
$stid = oci_parse($conn, "SELECT Id 
                            FROM test 
                        ORDER BY LENGTH(Id), Id ASC");

oci_execute($stid);

$p = oci_parse($conn, "SELECT COUNT(ID) 
                         FROM test");

oci_execute($p);

$count = oci_fetch_array($p);

if($count[0] != 0) {    
  $lastid = oci_result($stid, $count[0]-1);
}

它不起作用 - 我没有得到最后的记录。

最佳答案

如果您阅读了 oci_result 的文档,您会发现您错误地使用了第二个参数。

第二个参数是用于检索列的参数 - 它可以是列名或序号值。序数值是一个数字,从一 (1) 开始,基于 SELECT 子句中指定的列。序数不是推荐的做法,因为如果查询发生变化——如果你忘记更新序数引用,你对值的检索就会出错。实际上,随后的 COUNT 查询返回的值高于第一个查询 SELECT 子句中的列数。

$stid = oci_parse($conn, "SELECT Id 
                            FROM test 
                        ORDER BY LENGTH(Id), Id ASC");

oci_execute($stid);

$lastid = oci_result($stid, 1);
oci_result缺少 mysql_result 的第三个参数提供。

要在 Oracle 中工作,请使用:
$stid = oci_parse($conn, "SELECT x.id
                            FROM (SELECT Id 
                                    FROM test 
                                ORDER BY LENGTH(Id) DESC, Id DESC) x
                           WHERE ROWNUM = 1");

oci_execute($stid);

$lastid = oci_result($stid, 1);

更新的查询将返回一行,最新的基于反转 ORDER BY你以前用过。

关于php - 从oracle中选择记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5919823/

相关文章:

sql - 从 Oracle 游标的下一行获取数据

使用 TLS 1.2 的 PHP SOAP 通信

mysql - 嵌套查询以获取两个条件的计数

c# - 如果在 C# 中不存在则插入

java - Mybatis selectKey不返回序列值

sql - Oracle中无网络传输的真实查询执行时间

javascript - 谷歌地图标记信息窗口

php - 将多个选择选项放入 PHP 数组

php - if/else 简写来定义一个变量

c# - Entity Framework 中存储函数的使用