oci: использование массива вместо нескольких oci_bind_by_name

Я ищу способ связать мои подготовленные запросы в 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

Решение

использование 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
)
)

Это предполагает, что вы хотите получить доступ к полям по имени (ассоциативный массив), и в этом случае важно добавить псевдоним поля («тест» в приведенном выше примере), иначе имя поля будет назначено псевдослучайно. Например:

[:PDO1] => 'x'
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]