PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Perun
Отправлено: 07 Мая, 2020 - 14:56:43
Post Id


Гость


Покинул форум
Сообщений всего: 93
Дата рег-ции: Дек. 2016  


Помог: 0 раз(а)




В документации написано, что при наличии в запросе псевдопеременных нужно либо использовать связывание параметров через переменную/значение, либо же передавать входные данные прямо в execute. А отчего зависит это ИЛИ? И какая разница в использовании связывания параметров по значению или по переменной? Это связано только с тем, как представлен параметр - статически или динамически?
 
 Top
Мелкий Супермодератор
Отправлено: 07 Мая, 2020 - 15:34:54
Post Id



Активный участник


Покинул форум
Сообщений всего: 11883
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 614 раз(а)




execute подразумевает PDO::PARAM_STR.
Если вам этого недостаточно для запроса - понадобится bindParam/bindValue

Perun пишет:
какая разница в использовании связывания параметров по значению или по переменной?

Ну, как раз в том и разница: значение или ссылку на переменную даёте.


-----
PostgreSQL DBA
 
 Top
Perun
Отправлено: 07 Мая, 2020 - 16:34:31
Post Id


Гость


Покинул форум
Сообщений всего: 93
Дата рег-ции: Дек. 2016  


Помог: 0 раз(а)




Мелкий пишет:
Если вам этого недостаточно для запроса

Т.е., если значения параметров передаваемых в запросе должны быть отличными от типа string?

И вот это еще не очень понятно :
Цитата:
Тем не менее, некоторые драйверы позволяют запускать хранимые процедуры, которые, в свою очередь, могут возвращать данные посредством выходных параметров. Зачастую, такие параметры используются одновременно как входные и как выходные.

Какие например драйверы?
Хранимые процедуры пока что - темный лес...
 
 Top
Мелкий Супермодератор
Отправлено: 07 Мая, 2020 - 18:02:48
Post Id



Активный участник


Покинул форум
Сообщений всего: 11883
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 614 раз(а)




Perun пишет:
Т.е., если значения параметров передаваемых в запросе должны быть отличными от типа string?

То есть каноничный пример:
CODE (PHP):
скопировать код в буфер обмена
  1. $stmt = $pdo->prepare('select ... limit ?');
  2. $stmt->execute([$rowsCount]);

Может вести себя по разному в зависимости от драйвера и ATTR_EMULATE_PREPARES.
В частности, mysql может в итоге получить запрос с limit '10' вместо limit 10 и дать за это синтаксическую ошибку. Потому что по синтаксису здесь должно быть число, а не строка.
Или потому что вам понадобится PARAM_LOB или INOUT параметр - execute с этим не справится. Хотя в большинстве случаев execute будет достаточно.

Perun пишет:
Какие например драйверы?
Хранимые процедуры пока что - темный лес...

Ну вот когда понадобятся хранимые процедуры - тогда и будете узнавать как с INOUT параметрами этой СУБД работать из PHP.
Не имеет смысла заходить с обратной стороны и сначала выяснять для каких драйверов реализованы PARAM_INPUT_OUTPUT.


-----
PostgreSQL DBA
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB