如何使用PHP中的任何方法(oci / pdo)将包含字符串的数组绑定到oracle查询(IN子句)?

时间:2018-10-03 09:36:12

标签: php oci

我有一个如下所述的数组:

  

数组是$ number

array(84) { [0]=> string(0) "" [1]=> string(10) "12345678" [2]=> string(10) "12345679" [3]=> string(10) "12345610" [4]=> string(10) "12345611" [5]=> string(10) "12345612" [6]=> string(10) "12345613" [7]=> string(10) "12345614"}

现在,我要使数组绑定到我的sql查询,如下所示:

$sql = " SELECT    id, 
    FROM      cust_data
    WHERE     whatever IN (:number)";

我尝试使用以下方法:

$stid = oci_parse($conn, $sql); //Query SQL    
$idCollection = oci_new_collection($conn, 'ODCINUMBERLIST', 'SYS');
    foreach ($number as $num) {
        $idCollection->append($num);
    }
    oci_bind_by_name($stid, ':number', $idCollection,-1, SQLT_NTY);
    oci_execute($stid, OCI_DEFAULT);
    oci_fetch_all($stid,$result);
    var_dump( $result);

但这只是给我结果

  

array(0){}

谢谢。

1 个答案:

答案 0 :(得分:0)

请参阅Oracle https://www.oracle.com/technetwork/topics/php/underground-php-oracle-manual-098250.html免费书籍中的“在IN子句中绑定多个值” p169

总而言之,对于少量值,请使用带有绑定变量的固定SQL字符串。如果数据值少于SQL中的实际绑定变量,则绑定null。对于更大的列表,您可以构建一个SQL字符串:但仍使用绑定变量。