Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / PHP, Perl, Python |
![]() ![]() |
Alibek B. Member Откуда: Сообщений: 2965 |
Для работы с БД у меня есть библиотека, в ней используется такой код:public static function query($sql, &$ref_params=null, $batch=false) { ... foreach ($params as $param=>&$value) { switch (gettype($value)) { case 'string': $t = SQLT_CHR; $s = 200; break; case 'integer': $t = SQLT_INT; $s = 16; break; default: $t = SQLT_CHR; $s = 200; break; } if (in_array($param, $paramlist)) { if (static::debug()) print_r(['oci_bind_by_name',$st, $param, $value, (array_key_exists($param,$return) ? $s : -1), $t]); oci_bind_by_name($st, $param, $value, (array_key_exists($param,$return) ? $s : -1), $t); } } ... if (static::debug()) { print "\n*DEBUG*\n"; print "SQL: *$sql*\n"; print "ARG: " . print_r($params, true) . "\n"; print "\n"; } oci_set_prefetch($st, 100); $res = oci_execute($st, ($batch ? OCI_NO_AUTO_COMMIT : OCI_COMMIT_ON_SUCCESS)); ... } Для простых select-запросов код работает нормально. С insert почему-то проблема. Вызываю код так: $bm->exec($sql, [':ivi'=>$ivi::IVI_BM_ID, ':client'=>$row['ID'], ':account'=>$row['ACCOUNT_ID'], ':service'=>$row['SERVICE_ID'], ':token'=>$key]); Из отладочного вывода я вижу, что все задается правильно: Если SQL-запрос выполнять вручную, то он успешно выполняется. Биндинг переменных тоже работает корректно: Длина переменной задана -1, т.к. это входящие параметры, для возвращаемых параметров задается буфер фиксированного размера, но в этом запросе возвращаемых параметров нет. Однако при выполнении кода я получаю ошибку: Строка 299 — это как раз строка, где биндятся параметры запроса. Что тут неправильно? |
18 янв 19, 09:58 [21788478] Ответить | Цитировать Сообщить модератору |
Все форумы / PHP, Perl, Python | ![]() |