Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Передача параметров серверу php pdo
|
|||
|---|---|---|---|
|
#18+
Доброго времени. Подскажите пожалуйста придумал ли я велосипед и имеет ли он смысл вообще. Ситуация: экспресс работает с вебсервером и php на Винде одна из задач - парсинг и добавление в базу данных с оборудования, это порядка десятков вставок в одну таблицу и тысяч в другую обнаружил в списке компилированных планов множество планов на insert, что имхо не имеет смысла тк разница между ними только в длине переменных (например в одном случае передается @p1 varchar(10), а в другом @p1 varchar(8) и кстати все переменные передаются как varchar) обнаружил, что специфицировать длину переменной передаваемой при execute можно только если использовать pdo bindParam, вставлять через хранимку и в ней указывать, что входящая переменная также является output. В этом случае сервер использует один и тот же компилированный запрос. В чём я вижу проблему: я получаю обратно ненужные мне данные из хранимки - гоняю трафик, но это в пределах одной машины, так что не думаю это сильно замедляет процесс. В чём я вижу преимущество: серверу не надо выбирать из десятков вариантов компилированных запросов и не засоряется кеш запросов. Наверняка есть "подводные камни" которых я не вижу. Если короче: раньше я имел вставку кучи varchar с разной длиной и сервер компилировал запрос для каждого сочетания длин параметров , а теперь я переделал так, что вне зависимости от длины переменной она трактуется длиной переменной как в таблице и сервер использует один компилированный план для вставки. Но мне кажется это не очень нативно у меня получилось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2018, 00:53 |
|
||
|
Передача параметров серверу php pdo
|
|||
|---|---|---|---|
|
#18+
Я не понимаю, что теперь происходит при вставке. Делает ли сервер implicit conversion обратно к оригинальной длине строки перед вставкой? Если я буду делать форматирование длины средствами php и не заморачиваться с bindParam, то опять же серверу придется делать эту конверсию но тогда добавиться преобразование типов из varchar to int, зато я получу один план в Кеше. Стоит ли уменьшение количества компилированных планов на запрос этой головной боли? Несколько я помню кеш планов не резиновый и много вариантов одного запроса вытесняют другие запросы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2018, 01:13 |
|
||
|
Передача параметров серверу php pdo
|
|||
|---|---|---|---|
|
#18+
PizzaPizzaраньше я имел вставку кучи varchar с разной длиной и сервер компилировал запрос для каждого сочетания длин параметров , а теперь я переделал так, что вне зависимости от длины переменной она трактуется длиной переменной как в таблице и сервер использует один компилированный план для вставки. Но мне кажется это не очень нативно у меня получилось.Почему же, вполне нативно, переменная должна соответствовать типу поля. PizzaPizzaобнаружил, что специфицировать длину переменной передаваемой при execute можно только если использовать pdo bindParam, вставлять через хранимку и в ней указывать, что входящая переменная также является output.Как то сложно, неужели нельзя указать типы проще? Но это скорее вопрос для раздела по php, как там правильно делать запросы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2018, 08:39 |
|
||
|
Передача параметров серверу php pdo
|
|||
|---|---|---|---|
|
#18+
Возможно я понял в чем моя проблема, но проверить смогу только в конце недели: дело в том, что я не читал документацию на Microsoft драйвер для php, а полагался на базовые функции PDO, в которых, по какой то причине, нет возможности точно указать тип и длину IN параметров (можно только если IN_OUT и только int или varchar), а вот в доках на этот конкретный драйвер показаны константы, которые дают возможность типизировать, причем типами самого mssql. Вывод - надо читать мануалы производителя, особенно если это проприетарщина. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2018, 19:44 |
|
||
|
|

start [/forum/topic.php?fid=46&gotonew=1&tid=1689096]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
77ms |
get topic data: |
10ms |
get first new msg: |
6ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
| others: | 248ms |
| total: | 429ms |

| 0 / 0 |
