|
|
|
php + firebird
|
|||
|---|---|---|---|
|
#18+
Доброе время суток. Может кто натыкался на такую проблему: есть поле 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2006, 14:58 |
|
||
|
php + firebird
|
|||
|---|---|---|---|
|
#18+
а если * вместо % ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2006, 15:07 |
|
||
|
php + firebird
|
|||
|---|---|---|---|
|
#18+
1024byteа если * вместо % ? Если строка больше 7 символов то ошибка, если меньше, то вообще никакого результата ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2006, 15:11 |
|
||
|
php + firebird
|
|||
|---|---|---|---|
|
#18+
насколько я понял необходимо выбирать строки вида что_то1234567что_то если ничего не выйдет можно поробовать seelect * from tables where substring(field,2,7)='1234567' я не уверен в синтаксисе но суть в ручном вырезании сравниваемой части строки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2006, 15:17 |
|
||
|
php + firebird
|
|||
|---|---|---|---|
|
#18+
1024byteнасколько я понял необходимо выбирать строки вида что_то1234567что_то если ничего не выйдет можно поробовать seelect * from tables where substring(field,2,7)='1234567' я не уверен в синтаксисе но суть в ручном вырезании сравниваемой части строки Я не понял вашей идеи, строка может быть не только 7 символов, а от 0 до 9. И необходимо, как вы правильно сказали, выбирать что_тоСТРОКАчто_то. Для этого я и использовал like %строка% ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2006, 15:23 |
|
||
|
php + firebird
|
|||
|---|---|---|---|
|
#18+
взять udf с поддержкой regexp и забыть об этой проблеме как о страшном сне если не ошибаюсь что-то даже шло в комплекте firebird можно быдет писать даже достаточно сложные параметры выбора (freeudflib боюсь ошибится) кстати если поменять тип строки на varchar проблема не решается или ти сильно критичен ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2006, 15:29 |
|
||
|
php + firebird
|
|||
|---|---|---|---|
|
#18+
можно ещё поизвращаться и для провери случая %1234567% проверять поле по частям: select * from tables where left(field,5) like '%1234' and right(field,5) like '4567%' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2006, 15:33 |
|
||
|
php + firebird
|
|||
|---|---|---|---|
|
#18+
1024byteвзять udf с поддержкой regexp и забыть об этой проблеме как о страшном сне если не ошибаюсь что-то даже шло в комплекте firebird можно быдет писать даже достаточно сложные параметры выбора (freeudflib боюсь ошибится) кстати если поменять тип строки на varchar проблема не решается или ти сильно критичен ? Выход из ситуация я нашел в виде расширения поля pole1, но это как-то не красиво. По поводу сложных параметров они мне пока не нужны, мне подходит и обычный like . Просто мне стало интересно, почему запрос вываливается с ошибкой, когда длина строки после like больше длины поля - 2? Как я понял это ошибка обработки запроса в пхп?... ( когда выполняю запрос, который вываливается с ошибкой в пхп, ibase_query('select * from table where pole1 like ?',"%1234567%"), в ibexpert'e этот же запрос работает как нужно) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2006, 15:40 |
|
||
|
php + firebird
|
|||
|---|---|---|---|
|
#18+
Robert Tappan Morisможно ещё поизвращаться и для провери случая %1234567% проверять поле по частям: select * from tables where left(field,5) like '%1234' and right(field,5) like '4567%' :) попробую такое ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2006, 15:41 |
|
||
|
php + firebird
|
|||
|---|---|---|---|
|
#18+
Дмитрий Ви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); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2006, 15:49 |
|
||
|
php + firebird
|
|||
|---|---|---|---|
|
#18+
насчет запроса в ibexpert'e не знаю - проверить не могу. Но подключение то у вас нормально отрабатывает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2006, 15:51 |
|
||
|
php + firebird
|
|||
|---|---|---|---|
|
#18+
????? Дмитрий Ви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); полностью согласен. Вопрос не много не в этом ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2006, 15:52 |
|
||
|
php + firebird
|
|||
|---|---|---|---|
|
#18+
?????насчет запроса в ibexpert'e не знаю - проверить не могу. Но подключение то у вас нормально отрабатывает? да. я же говорю, результаты вижу, иногда :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2006, 16:03 |
|
||
|
php + firebird
|
|||
|---|---|---|---|
|
#18+
Дмитрий ВиКак я понял это ошибка обработки запроса в пхп?... ошибку возвращает субд. пхп тут не при чем. если текст ошибки именно такой то подключениеу вас состоялось. и ошибка где-то между ними. там случайно при формироании запроса никакие спецсимволы в него не попадают ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2006, 18:15 |
|
||
|
php + firebird
|
|||
|---|---|---|---|
|
#18+
1024byte там случайно при формироании запроса никакие спецсимволы в него не попадают ? Нет. А почему я подумал на пхп, так это потому что в пхп у меня запрос обрабатывается с ошибкой, а в ibexpert'e без ошибок и как надо. Пример я уже приводил выше, повторю pole1 varchar(9) select * from table where pole1 like '%1234567%' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2006, 08:31 |
|
||
|
php + firebird
|
|||
|---|---|---|---|
|
#18+
Дмитрий Виpole1 varchar(9) select * from table where pole1 like '%1234567%' да хоть '%01234567890%' какая разница, вернуть должен null. Чет вы там с параметрами намудрили ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2006, 09:20 |
|
||
|
php + firebird
|
|||
|---|---|---|---|
|
#18+
????? да хоть '%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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2006, 08:26 |
|
||
|
php + firebird
|
|||
|---|---|---|---|
|
#18+
Дмитрий Ви $res = ibase_query($dth, "select * from table where pole1 like ? ", "%123456789%"); выполните: $res = ibase_query($dth, "select * from table where pole1 like '%123456789%' "); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2006, 10:18 |
|
||
|
php + firebird
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2006, 10:24 |
|
||
|
php + firebird
|
|||
|---|---|---|---|
|
#18+
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%"); ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2006, 10:44 |
|
||
|
php + firebird
|
|||
|---|---|---|---|
|
#18+
Первый запрос нормальный, а второй вы сами выдумали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2006, 10:45 |
|
||
|
php + firebird
|
|||
|---|---|---|---|
|
#18+
а это уже для самостоятельного изучения, удачи :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2006, 10:49 |
|
||
|
|

start [/forum/topic.php?fid=23&msg=33521024&tid=1476836]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
251ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
| others: | 263ms |
| total: | 618ms |

| 0 / 0 |
