2015-02-09 1 views
1

Недавно я преобразовал свой сайт из OCI в PDO.PDO PDOStatement :: execute(): SQLSTATE [HY000]: Общая ошибка: 1008 OCIStmtExecute: ORA-01008: не все связанные переменные

У меня есть эта PHP:

foreach ($bindings as $key => $value) { 
    if (strpos($query, $key)) { 
    $stmt->bindParam(":$key", $value); 
    echo "Bound ". $key ." => ". $value; 
    } 
    } 

Выход:

Bound :globalSearch0 => %NCR% 
Bound :globalSearch1 => %NCR% 
Bound :globalSearch2 => %NCR% 
Bound :globalSearch3 => %NCR% 
Bound :globalSearch4 => %NCR% 

но PHP по-прежнему выдает сообщение об ошибке:

Warning: PDOStatement::execute(): SQLSTATE[HY000]: General error: 1008 OCIStmtExecute: ORA-01008: not all variables bound

но все переменные являются связаны! Я эхо генерирую запрос SQL, и он использует 5 переменных, ту же сумму, что и связанные!

Я ничего не теряю здесь? Это тот же код, который я использовал oci_bind_by_name, и у меня не было никаких проблем, но bindParam, похоже, вызывает это.

ответ

0

Если у вас массив ключа уже есть ':' в нем, вам нужно добавить его снова в аргументе bindParam?

Это должно быть $stmt->bindParam($key, $value);

Чтобы сделать тест точным он должен выглядеть следующим образом:

if($stmt->bindParam(":$key", $value)){ 
    echo "Bound ". $key ." => ". $value; 
} 

Чтобы убедиться, что связывание действительно успешным