oci:使用数组而不是多个oci_bind_by_name

时间:2014-12-04 09:47:03

标签: php oracle oci

我正在寻找一种方法来在oci中绑定我准备好的请求,就像在PDO中一样:

// Using PDO :
$stmt = $dbh->prepare($sql);
$stmt = $dbh->execute($params);

例如

$sql = "SELECT * FROM `Users` WHERE `username` = ? AND `password` = ?";
$params = array('foo', 'toto');

我的问题是我想在我的一个项目中使用Oracle,我需要修改我的所有类DataBaseAccessor,它基于$sql$params。如果有任何方法让我不修改我的所有代码,那可能很酷:)

1 个答案:

答案 0 :(得分:1)

使用PDO_OCIOCI8函数仅支持命名变量绑定,原因我不知道。


<强> 编辑:

以下是一个例子:

$db = new PDO('oci:dbname=hostname/database;charset=AL32UTF8', 'usr', 'pwd');

$stmt = $db->prepare('select 1, 2, 3, ? as "test" from dual');
$stmt->execute(['x']);

var_dump($stmt->fetchAll(PDO::FETCH_ASSOC));

这给出了以下结果:

Array
(
    [0] => Array
        (
            [1] => 1
            [2] => 2
            [3] => 3
            [test] => x
        )
)

这假设您希望按名称(关联数组)访问字段,在这种情况下,添加字段别名(上例中的“test”)很重要,或者字段名称将被伪随机分配。例如:

[:PDO1] => 'x'