Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
PDO, параметры - на сервер уходит как char - не понимаю
|
|||
|---|---|---|---|
|
#18+
Бяда в следующем: получаю параметры из jqQuery: Код: php 1. 2. 3. 4. Далее формирую запрос (подключение пропускаю): Код: php 1. 2. 3. 4. 5. 6. 7. 8. В результате параметры :start и :limit имеют значения '0' и '10' (т.е. char), а не ожидаемое 0 и 10 (цифра). С результирующей ошибкой в логах апача: АПАЧ[Thu Sep 19 09:30:18 2013] [error] [client 127.0.0.1] PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''0', '10'' at line 1' in C:\\Program Files\\Apache Group\\Apache2\\htdocs\\test\\get_data.php:72\nStack trace:\n#0 C:\\Program Files\\Apache Group\\Apache2\\htdocs\\test\\get_data.php(72): PDOStatement->execute()\n#1 {main}\n thrown in C:\\Program Files\\Apache Group\\Apache2\\htdocs\\test\\get_data.php on line 72, referer: http://127.0.0.1/test/ Чего я не правильно понял при работе с PDO? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2013, 09:41 |
|
||
|
PDO, параметры - на сервер уходит как char - не понимаю
|
|||
|---|---|---|---|
|
#18+
AlexSSSS, вообще сомнительно что в месте :sidx и :sord можно использовать параметры. А для :start, :limit наверное надо использовать bindValue(':start', $start, PDO::PARAM_INT) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2013, 10:15 |
|
||
|
PDO, параметры - на сервер уходит как char - не понимаю
|
|||
|---|---|---|---|
|
#18+
[quot ?]AlexSSSS, вообще сомнительно что в месте :sidx и :sord можно использовать параметры. Эти параметры как раз и переварились нормально - они изначально char. ?А для :start, :limit наверное надо использовать bindValue(':start', $start, PDO::PARAM_INT) Попробовал - Код: php 1. 2. результата не дало: та-же самая ошибка. Попробовал "в лоб": Код: php 1. Сработало. Но тут теряется одна из "фишек" PDO про безопасные параметры. Думаю дальше... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2013, 10:38 |
|
||
|
PDO, параметры - на сервер уходит как char - не понимаю
|
|||
|---|---|---|---|
|
#18+
Код: php 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2013, 10:48 |
|
||
|
PDO, параметры - на сервер уходит как char - не понимаю
|
|||
|---|---|---|---|
|
#18+
"Каменный цветок" вышел наполовину: параметр start - съеден, limit - по прежнему не переваривается:-( Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. В логе: Код: plaintext 1. 2. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2013, 11:29 |
|
||
|
PDO, параметры - на сервер уходит как char - не понимаю
|
|||
|---|---|---|---|
|
#18+
А если? Код: sql 1. или Код: php 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2013, 11:42 |
|
||
|
PDO, параметры - на сервер уходит как char - не понимаю
|
|||
|---|---|---|---|
|
#18+
AlexSSSSНо тут теряется одна из "фишек" PDO про безопасные параметры.Ничего тут не теряется. Точнее, ничего не приобретается. В order by можно указывать либо имена/алиасы полей или выражения на их основе, либо числовые литералы означающие номер поля в секции SELECT. В остальных случаях просто будет сортировка по указанному значению. А в limit можено указывать только числовые литералы, которые можно туда подставить только конкатенацией. Сделаете ее сами или заставите это сделать PDO перед выполнением запроса - роли не играет. Это все равно будет конкатенация со всеми вытекающими последствиями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2013, 12:25 |
|
||
|
PDO, параметры - на сервер уходит как char - не понимаю
|
|||
|---|---|---|---|
|
#18+
miksoftНичего тут не теряется. Точнее, ничего не приобретается. В order by можно указывать либо имена/алиасы полей или выражения на их основе, либо числовые литералы означающие номер поля в секции SELECT. В остальных случаях просто будет сортировка по указанному значению. А в limit можено указывать только числовые литералы, которые можно туда подставить только конкатенацией. Сделаете ее сами или заставите это сделать PDO перед выполнением запроса - роли не играет. Это все равно будет конкатенация со всеми вытекающими последствиями. Да это понятно! Именно так и обошел (добавил проверку на то, чтобы в этих параметрах были только цифры разумные, если не цифры - лепит 0 и 10). Просто интересно теперь - а почему это произошло. И не произойдет-ли в случае подобном этому (попробую попозже): Код: php 1. 2. Где значение :PLANS вводит лапками многомудрый юзверь :-( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2013, 12:44 |
|
||
|
PDO, параметры - на сервер уходит как char - не понимаю
|
|||
|---|---|---|---|
|
#18+
AlexSSSS, С where sum(a.totalrub) у вас точно ничего хорошего не выйдет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2013, 12:53 |
|
||
|
PDO, параметры - на сервер уходит как char - не понимаю
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2013, 12:58 |
|
||
|
PDO, параметры - на сервер уходит как char - не понимаю
|
|||
|---|---|---|---|
|
#18+
Пардон... Исправляюсь: Код: sql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2013, 13:18 |
|
||
|
PDO, параметры - на сервер уходит как char - не понимаю
|
|||
|---|---|---|---|
|
#18+
HAVING не в моде? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2013, 13:20 |
|
||
|
PDO, параметры - на сервер уходит как char - не понимаю
|
|||
|---|---|---|---|
|
#18+
Забыл про него :-( Код: plsql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2013, 13:26 |
|
||
|
PDO, параметры - на сервер уходит как char - не понимаю
|
|||
|---|---|---|---|
|
#18+
AlexSSSS, в секции WHERE фунция DATE только вред приносит, не дает индексу использоваться. Уберите ее. Только дату в константе на забудьте на день увеличить, чтобы логика сохранилась. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2013, 13:31 |
|
||
|
PDO, параметры - на сервер уходит как char - не понимаю
|
|||
|---|---|---|---|
|
#18+
Код: php 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2013, 13:35 |
|
||
|
PDO, параметры - на сервер уходит как char - не понимаю
|
|||
|---|---|---|---|
|
#18+
как-то так...$STH = $db->prepare($query); $STH->execute(array( $sidx, $sord, (int)$start, (int)$limit )); Спасибо. Сейчас попробую. miksoftAlexSSSS, в секции WHERE фунция DATE только вред приносит, не дает индексу использоваться. Уберите ее. Только дату в константе на забудьте на день увеличить, чтобы логика сохранилась. Спасибо. Только обсуждение данного запроса уводит от темы. Этот запрос привел как пример своих "страхов". Т.е. того, что при написании: Код: plsql 1. и вводе пользователем цифры 100000, при применении параметра в PDO серверу пойдет Код: plsql 1. то есть строка, а не Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2013, 13:45 |
|
||
|
PDO, параметры - на сервер уходит как char - не понимаю
|
|||
|---|---|---|---|
|
#18+
AlexSSSS, Что там пойдет в PDO - не знаю, не пользовался. Но можно подстраховаться на уровне MySQL: Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2013, 13:48 |
|
||
|
PDO, параметры - на сервер уходит как char - не понимаю
|
|||
|---|---|---|---|
|
#18+
автор Код: php 1. то есть строка, а не Код: php 1. Это равносильно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2013, 13:52 |
|
||
|
PDO, параметры - на сервер уходит как char - не понимаю
|
|||
|---|---|---|---|
|
#18+
ORDER BY биндите? Наркоманы, штоле? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2013, 13:53 |
|
||
|
PDO, параметры - на сервер уходит как char - не понимаю
|
|||
|---|---|---|---|
|
#18+
Код: php 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2013, 13:53 |
|
||
|
PDO, параметры - на сервер уходит как char - не понимаю
|
|||
|---|---|---|---|
|
#18+
Hettавтор Код: php 1. то есть строка, а не Код: php 1. Это равносильноКонкретно с sum() точно не знаю, а в общем случае - нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2013, 14:01 |
|
||
|
PDO, параметры - на сервер уходит как char - не понимаю
|
|||
|---|---|---|---|
|
#18+
miksoftHettпропущено... Это равносильноКонкретно с sum() точно не знаю, а в общем случае - нет. В случае сравнения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2013, 14:48 |
|
||
|
PDO, параметры - на сервер уходит как char - не понимаю
|
|||
|---|---|---|---|
|
#18+
авторComparison operations result in a value of 1 (TRUE), 0 (FALSE), or NULL. These operations work for both numbers and strings. Strings are automatically converted to numbers and numbers to strings as necessary. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2013, 14:49 |
|
||
|
PDO, параметры - на сервер уходит как char - не понимаю
|
|||
|---|---|---|---|
|
#18+
HettавторStrings are automatically converted to numbers and numbers to strings as necessary.Вот тут-то собака и порылась. MySQL не всегда имеет возможность узнать правильное направление преобразования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2013, 14:59 |
|
||
|
|

start [/forum/topic.php?fid=23&msg=38401213&tid=1463447]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
39ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 365ms |

| 0 / 0 |
