我尝试定义function
来执行Oracle查询,并使用收到的oci_fetch_array()
变量动态设置string
的模式。这是功能:
public function db_single_select($conn,$select,$table,$condition,$fetch_mods='') {
//A string should be sent to "$fetch_mods" with this format: mode1+mode2+etc...
//If a value is not passed to '$fetch_mods', it will be the default fetch mode
$sql = oci_parse($conn, "select $select from $table where $condition");
$sql_result = oci_execute($sql, OCI_DEFAULT);
if($sql_result){
if(empty($fetch_mods)) {
$res = oci_fetch_array($sql);
}
else{
$res = oci_fetch_array($sql, $fetch_mods);
}
}
else{
$res = FALSE;
}
oci_free_statement($sql);
return $res;
}
我这样称呼函数:
db_single_select($conn, $select, $table_name, $condition, 'OCI_ASSOC');
我收到此警告:
Warning: oci_fetch_array() expects parameter 2 to be long, string given in db_connect.php on line 61
我知道oci_fetch_array()
的第二个参数(模式)应该是数字的,就像它在PHP文档中所说的那样。 http://www.php.net/manual/en/function.oci-fetch-array.php
问题是如何根据函数??
接收的变量设置模式因为您可以通过使用+
符号
$row = oci_fetch_array ($stid, OCI_ASSOC+OCI_RETURN_NULLS);
,是否有一种简单的方法可以在函数中接收类似OCI_ASSOC+OCI_RETURN_NULLS
的字符串,并设置模式?
答案 0 :(得分:1)
你似乎误解了constants实际上是什么。在OCI_ASSOC
(和其他OCI constants)的特定情况下,它表示一个简单的整数值。这可以通过var_dump(OCI_ASSOC);
int(1)
的输出来证明。组合OCI_ASSOC+OCI_RETURN_NULLS
等常量是一个简单的加法运算,结果为int(5)
。
要使您的函数正常工作,您应该通过删除周围的撇号直接传递常量:
db_single_select($conn, $select, $table_name, $condition, OCI_ASSOC);
安全警告:
您的代码容易受到SQL Injection的影响(另请参阅PHP manual says about it)。您应该使用parameter binding来减轻攻击的可能性。
答案 1 :(得分:-1)
您必须确定连接是否成功。
检查代码中$conn
的资源值的返回值。
希望这对你有所帮助。