我正在寻找一种方法来在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
。如果有任何方法让我不修改我的所有代码,那可能很酷:)
答案 0 :(得分:1)
使用PDO_OCI
。 OCI8
函数仅支持命名变量绑定,原因我不知道。
<强> 编辑: 强>
以下是一个例子:
$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'