powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP и OCI/Oracle - не могу понять, где ошибка
1 сообщений из 1, страница 1 из 1
PHP и OCI/Oracle - не могу понять, где ошибка
    #39761269
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для работы с БД у меня есть библиотека, в ней используется такой код:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
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 почему-то проблема.
Вызываю код так:
Код: php
1.
$bm->exec($sql, [':ivi'=>$ivi::IVI_BM_ID, ':client'=>$row['ID'], ':account'=>$row['ACCOUNT_ID'], ':service'=>$row['SERVICE_ID'], ':token'=>$key]);


Из отладочного вывода я вижу, что все задается правильно:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
*DEBUG*
SQL: *insert into TRANS_BATCH_LINK (TRANS_PROVIDER_ID, LOCAL_CLIENT_ID, LOCAL_ACCOUNT_ID, LOCAL_SERVICE_ID, FIELD, VALUE)
values (:ivi, :client, :account, :service, 'access_token', :token)
*
ARG: Array
(
    [:ivi] => 2
    [:client] => 2829
    [:account] => 7081
    [:service] => 328937
    [:token] => xxxxx_xxxxx_xxxxx_xxxxx_xxxxx
)
Если SQL-запрос выполнять вручную, то он успешно выполняется.
Биндинг переменных тоже работает корректно:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
Array
(
    [0] => oci_bind_by_name
    [1] => Resource id #31
    [2] => :ivi
    [3] => 2
    [4] => -1
    [5] => 3
)
Array
(
    [0] => oci_bind_by_name
    [1] => Resource id #31
    [2] => :client
    [3] => 2829
    [4] => -1
    [5] => 1
)
Array
(
    [0] => oci_bind_by_name
    [1] => Resource id #31
    [2] => :account
    [3] => 7081
    [4] => -1
    [5] => 1
)
Array
(
    [0] => oci_bind_by_name
    [1] => Resource id #31
    [2] => :service
    [3] => 328937
    [4] => -1
    [5] => 1
)
Array
(
    [0] => oci_bind_by_name
    [1] => Resource id #31
    [2] => :token
    [3] => xxxxx_xxxxx_xxxxx_xxxxx_xxxxx
    [4] => -1
    [5] => 1
)
Длина переменной задана -1, т.к. это входящие параметры, для возвращаемых параметров задается буфер фиксированного размера, но в этом запросе возвращаемых параметров нет.
Однако при выполнении кода я получаю ошибку:
Код: plaintext
1.
2.
PHP Warning:  oci_bind_by_name(): ORA-01036: illegal variable name/number in .../lib/classes/Billing.class.php on line 299
Warning: oci_bind_by_name(): ORA-01036: illegal variable name/number in .../lib/classes/Billing.class.php on line 299
Строка 299 — это как раз строка, где биндятся параметры запроса.
Что тут неправильно?
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP и OCI/Oracle - не могу понять, где ошибка
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]