[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как вызывать sql-функции
McLotos
Всем привет! В общем есть такой код
public function query($sql, $params) {
$stmt = $this->connection->prepare($sql);
foreach($params as $param=>$value) {
$stmt->bindValue(':'.$param, $value);
}
$stmt->execute();
}

$sql = 'UPDATE `sessions` SET `id`=:id, `ssid`=:ssid, `data`=:data, `started`=:started;

$params - ассоциативный массив с параметрами для запроса
С этим все понятно и это работает.
Непонятно почему не работает
$sql = 'UPDATE `sessions` SET `id`=:id, `ssid`=:ssid, `data`=:data, `started`=:started, `lastAction`=:lastAction;

если :lastAction = CURRENT_TIMESTAMP() то в поле записывается не результат функции а имя функции, как это починить?

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
T1grOK
А зачем функцию подставлять через связывание?
Просто пишем напрямую в запрос и все дела.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
McLotos
Цитата (T1grOK @ 22.04.2017 - 10:31)
Просто пишем напрямую в запрос и все дела.

Напрямую в запрос ничего не могу писать, не пишу прямые запросы, только через QB.


_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
T1grOK
PDO не поддерживает связывание таких параметров, это нужно самостоятельно писать реализацию.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
McLotos
Цитата (T1grOK @ 22.04.2017 - 11:33)
PDO не поддерживает связывание таких параметров, это нужно самостоятельно писать реализацию.

Подумаю

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
AllesKlar
McLotos
`lastAction`=:lastAction это присвоение параметра.
`lastAction`= CURRENT_TIMESTAMP() - это чистая SQL конструкция, и пытаться ее запихнуть в параметр, это тоже самое, что написать
bindParam(':param', 'select id from relevantTable....')
Что является в обоих случаях бредом и непониманием работы механизма Prepared Statement
Параметром может быть только скаляр
Prepared Statement шлет два пакета отдельно:
- подготовленный запрос
- подставляемые параметры
и уже на уровне драйвера базы подставляет параметры в запрос, в соответствии с типами соответствующих полей. Если попытаться в качестве параметра отправить SQL-функцию, драйвер просто не сможет ее вычислить, т.к. до самого запроса в базе еще дело не дошло.

Чтоже касается самого поля со значением CURRENT_TIMESTAMP() , то его вообще лучше сделать с дефолтным значением CURRENT_TIMESTAMP() и не обновлять, база сама об этом позаботится

_____________
[продано копирайтерам]
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.