[英]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个结果或更多结果返回,使用此代码我永远无法获取信息。
你对如何解决这个问题有任何想法吗?
非常感谢您的帮助!
最好的问候,英格玛
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.