繁体   English   中英

PHP,Oracle和ODBC:如何检查结果集是否为空?

[英]PHP, Oracle and ODBC: How to check if result set is empty?

亲爱的书呆子和论坛者,

我在带有ODBC驱动程序的Oracle数据库上遇到了一个美味的PHP问题。

首先是代码:

$ora_conn = odbc_connect($ora_dsn, $ora_user, $ora_pass, SQL_CUR_USE_ODBC);
$ora_data = odbc_exec($ora_conn,$sql);

//echo "test: ".odbc_num_rows( $ora_data );
//exit;

if(odbc_num_rows( $ora_data ) > 0){
    // do something in case no result came back
}

if($ora_data){
    // do something in case result came back
}

如果我取消测试,我总是回来-1! 无论语句是否产生0,1或5行......

因此,如果没有结果,1个结果或更多结果返回,使用此代码我永远无法获取信息。

你对如何解决这个问题有任何想法吗?

非常感谢您的帮助!

最好的问候,英格玛

odbc_num_rows似乎odbc_num_rows INSERT,UPDATE和DELETE查询可靠。

手册说:

使用odbc_num_rows()来确定SELECT之后可用的行数将返回-1并包含许多驱动程序。

解决此问题的一种方法是在SQL中执行COUNT(*) 请看这里的例子。

if(odbc_num_rows( $ora_data ) == 0){
    // do something in case no result came back
}

if(!$ora_data){
    // do something in case result came back
}

我解决了,谢谢你的回答......

我的解决方案是:代码优先

$sql =  "SELECT GUID FROM SMSITEACCESS WHERE PROJECTID = 901981 AND SID = " . $guid;
$ora_data = odbc_exec($ora_conn,$sql);

$arr = @odbc_fetch_array($ora_data);

if($arr['GUID'] == ""){
    $dbh_insert = new PDO($dsn,$dbuser,$dbpass);
    $dbh_insert->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
    $sql_insert = "INSERT INTO SMSITEACCESS (SID, CREATED, CREATEUSER, PROJECTID) VALUES ('".$guid."', SYSDATE, '".$userid."', '901981')";
    $res_insert = $dbh_insert -> prepare($sql_insert);
    $res_insert -> execute();
    $sql_insert=null;
    $res_insert=null;
    $dbh_insert=null;
}

odbc_free_result($ora_data);

我首先添加了一个包含文件。 如果要处理的每个表都包含在一个数据集的最后一个,则此脚本逐个检查。 如果其中任何一个没有,则将其创建为空。

通过这种解决方法,我不再需要检查数据是否回来......

它可能要容易得多,但ODBC驱动程序接缝在这种情况下会出错。

Thnx快速回复,祝你有个美好的一天。

英格玛

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM