powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / php + firebird
23 сообщений из 23, страница 1 из 1
php + firebird
    #33516282
Дмитрий Ви
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе время суток.
Может кто натыкался на такую проблему:
есть поле pole1 varchar(9)
делаю запрос
ibase_query('select * from table where pole1 like ?',"%123456%")
то все отрабатывает нормально и показывается результат, но если я выполняю запрос
ibase_query('select * from table where pole1 like ?',"%1234567%")
т.е. прибавил еще один символ, то возникает ошибка:
Dynamic SQL Error SQL error code = -303 arithmetic exception, numeric overflow, or string truncation
Получиось, что если в строку like я вставляю 7 и более символов до 9, возникает такая ошибка. Почему?

Заранее спасибо за ответ.
P.S. версия php 5.0.5 версия firebird 1.5.2
...
Рейтинг: 0 / 0
php + firebird
    #33516329
1024byte
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если * вместо % ?
...
Рейтинг: 0 / 0
php + firebird
    #33516355
Дмитрий Ви
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1024byteа если * вместо % ?

Если строка больше 7 символов то ошибка, если меньше, то вообще никакого результата
...
Рейтинг: 0 / 0
php + firebird
    #33516381
1024byte
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
насколько я понял необходимо выбирать строки вида
что_то1234567что_то
если ничего не выйдет можно поробовать
seelect * from tables where substring(field,2,7)='1234567'
я не уверен в синтаксисе но суть в ручном вырезании сравниваемой части строки
...
Рейтинг: 0 / 0
php + firebird
    #33516411
Дмитрий Ви
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1024byteнасколько я понял необходимо выбирать строки вида
что_то1234567что_то
если ничего не выйдет можно поробовать
seelect * from tables where substring(field,2,7)='1234567'
я не уверен в синтаксисе но суть в ручном вырезании сравниваемой части строки

Я не понял вашей идеи, строка может быть не только 7 символов, а от 0 до 9. И необходимо, как вы правильно сказали, выбирать что_тоСТРОКАчто_то. Для этого я и использовал like %строка%
...
Рейтинг: 0 / 0
php + firebird
    #33516444
1024byte
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
взять udf с поддержкой regexp и забыть об этой проблеме как о страшном сне
если не ошибаюсь что-то даже шло в комплекте firebird
можно быдет писать даже достаточно сложные параметры выбора
(freeudflib боюсь ошибится)

кстати если поменять тип строки на varchar проблема не решается
или ти сильно критичен ?
...
Рейтинг: 0 / 0
php + firebird
    #33516462
Фотография Robert Tappan Moris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно ещё поизвращаться и для провери случая %1234567% проверять поле по частям:
select * from tables where left(field,5) like '%1234' and right(field,5) like '4567%'
...
Рейтинг: 0 / 0
php + firebird
    #33516490
Дмитрий Ви
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1024byteвзять udf с поддержкой regexp и забыть об этой проблеме как о страшном сне
если не ошибаюсь что-то даже шло в комплекте firebird
можно быдет писать даже достаточно сложные параметры выбора
(freeudflib боюсь ошибится)

кстати если поменять тип строки на varchar проблема не решается
или ти сильно критичен ?

Выход из ситуация я нашел в виде расширения поля pole1, но это как-то не красиво.
По поводу сложных параметров они мне пока не нужны, мне подходит и обычный like . Просто мне стало интересно, почему запрос вываливается с ошибкой, когда длина строки после like больше длины поля - 2? Как я понял это ошибка обработки запроса в пхп?... ( когда выполняю запрос, который вываливается с ошибкой в пхп, ibase_query('select * from table where pole1 like ?',"%1234567%"), в ibexpert'e этот же запрос работает как нужно)
...
Рейтинг: 0 / 0
php + firebird
    #33516500
Дмитрий Ви
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Robert Tappan Morisможно ещё поизвращаться и для провери случая %1234567% проверять поле по частям:
select * from tables where left(field,5) like '%1234' and right(field,5) like '4567%'

:) попробую такое
...
Рейтинг: 0 / 0
php + firebird
    #33516533
?????
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дмитрий Виibase_query('select * from table where pole1 like ?',"%1234567%")
вообще-то ibase_query вызывается следующем образом:
$dbh = ibase_connect ($host, $username, $password);
$sql = 'SELECT * FROM tblname';
$sth = ibase_query ($dbh, $sql);
...
Рейтинг: 0 / 0
php + firebird
    #33516539
?????
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
насчет запроса в ibexpert'e не знаю - проверить не могу. Но подключение то у вас нормально отрабатывает?
...
Рейтинг: 0 / 0
php + firebird
    #33516541
Дмитрий Ви
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
????? Дмитрий Виibase_query('select * from table where pole1 like ?',"%1234567%")
вообще-то ibase_query вызывается следующем образом:
$dbh = ibase_connect ($host, $username, $password);
$sql = 'SELECT * FROM tblname';
$sth = ibase_query ($dbh, $sql);

полностью согласен. Вопрос не много не в этом ;)
...
Рейтинг: 0 / 0
php + firebird
    #33516591
Дмитрий Ви
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
?????насчет запроса в ibexpert'e не знаю - проверить не могу. Но подключение то у вас нормально отрабатывает?

да. я же говорю, результаты вижу, иногда :)
...
Рейтинг: 0 / 0
php + firebird
    #33517077
1024byte
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий ВиКак я понял это ошибка обработки запроса в пхп?...
ошибку возвращает субд.
пхп тут не при чем.
если текст ошибки именно такой то подключениеу вас состоялось.
и ошибка где-то между ними.
там случайно при формироании запроса никакие спецсимволы в него не попадают ?
...
Рейтинг: 0 / 0
php + firebird
    #33517882
Дмитрий Ви
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1024byte
там случайно при формироании запроса никакие спецсимволы в него не попадают ?

Нет.
А почему я подумал на пхп, так это потому что в пхп у меня запрос обрабатывается с ошибкой, а в ibexpert'e без ошибок и как надо. Пример я уже приводил выше, повторю
pole1 varchar(9)
select * from table where pole1 like '%1234567%'
...
Рейтинг: 0 / 0
php + firebird
    #33517945
?????
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дмитрий Виpole1 varchar(9)
select * from table where pole1 like '%1234567%'
да хоть '%01234567890%' какая разница, вернуть должен null. Чет вы там с параметрами намудрили
...
Рейтинг: 0 / 0
php + firebird
    #33520773
Дмитрий Ви
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
?????
да хоть '%01234567890%' какая разница, вернуть должен null.

я тоже так думаю.

вот реальный код:
<?
$dth = ibase_connect("localhost",
"login", "password", "win1251" );
$res = ibase_query($dth, "select * from table where pole1 like ? ", "%123%");
echo ibase_errmsg();
if($r = ibase_fetch_object($res))
echo $r->FNAME;

$res = ibase_query($dth, "select * from table where pole1 like ? ", "%123456789%");
echo ibase_errmsg();
if( $r = ibase_fetch_object($res))
echo $r->FNAME;
?>

в первом случае ошибки не выдается и выводится результат. Во втором случае выдается ошибка
Warning: ibase_query() [function.ibase-query]: Dynamic SQL Error SQL error code = -303 arithmetic exception, numeric overflow, or string truncation in /usr/local/apache/htdocs/i.php on line 9
Dynamic SQL Error SQL error code = -303 arithmetic exception, numeric overflow, or string truncation
...
Рейтинг: 0 / 0
php + firebird
    #33521024
msh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий Ви
$res = ibase_query($dth, "select * from table where pole1 like ? ", "%123456789%");

выполните:
$res = ibase_query($dth, "select * from table where pole1 like '%123456789%' ");
...
Рейтинг: 0 / 0
php + firebird
    #33521050
msh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
POSTAL_CODE VARCHAR(12)
имеется строка = '1234567', ее вернет $cursor = ibase_query($dth, "select * from customer where postal_code like ?", "%123456%");
А это вернет null
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
$strconnect = "localhost:C:\Program Files\Firebird\examples\employee.gdb";
$dth = ibase_connect($strconnect, "sysdba", "masterkey", "win1251" );
$cursor = ibase_query($dth, "select * from customer where postal_code like '%1234567890123%' ");
$row_array = ibase_fetch_row($cursor);
print_r($row_array);
ibase_free_result($cursor);
ibase_close($dth);
...
Рейтинг: 0 / 0
php + firebird
    #33521130
Дмитрий Ви
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
msh
выполните:
$res = ibase_query($dth, "select * from table where pole1 like '%123456789%' ");

Ваш вариант работает. Можете объяснить в чем различиня между
$res = ibase_query($dth, "select * from table where pole1 like '%123456789%' ");
и
$res = ibase_query($dth, "select * from table where pole1 like ?" ,"%123456789%");
?
...
Рейтинг: 0 / 0
php + firebird
    #33521135
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первый запрос нормальный, а второй вы сами выдумали.
...
Рейтинг: 0 / 0
php + firebird
    #33521154
msh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а это уже для самостоятельного изучения, удачи :-)
...
Рейтинг: 0 / 0
php + firebird
    #33521229
Дмитрий Ви
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо буду дальше разбираться :)
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / php + firebird
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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