Автор Тема: Ошибка MySQL  (Прочитано 142 раз)

28 Октября 2015, 11:59:36
  • Фрилансер
  • *
  • Сообщений: 164
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Всем добрый день.
Открыто поле в базе, имя info тип  символьный VARCHAR 200  в базе таблицы  cart_product
При изменении уже существующей записи в базе по данному скрипту
Db::getInstance()->execute('
UPDATE `'._DB_PREFIX_.'cart_product`
SET `quantity` = `quantity` '.$qty.', ` info ` = '.$infoSUS.',  `date_add` = NOW()
WHERE `id_product` = '.(int)$id_product.
(!empty($id_product_attribute) ? ' AND `id_product_attribute` = '.(int)$id_product_attribute : '').'
AND `id_cart` = '.(int)$this->id.(Configuration::get('PS_ALLOW_MULTISHIPPING') && $this->isMultiAddressDelivery() ? ' AND `id_address_delivery` = '.(int)$id_address_delivery : '').'
LIMIT 1'
);
Если строковая переменная  $infoSUS содержит только цифры то все проходит нормально.
Если содержит только текст, то, выдает ошибку
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 'текст, `date_add` = NOW() WHERE `id_product` = 24 AND `id_product_at' at line 2

UPDATE `ps_cart_product`
SET `quantity` = `quantity` + 1,` info` = Мой текст, `date_add` = NOW()
WHERE `id_product` = 24 AND `id_product_attribute` = 2463
AND `id_cart` = 301
LIMIT 1
Почему требует проверить право MySQL сервера для использования текста?
Как это исправить?
Спасибо!!
28 Октября 2015, 12:14:21
Ответ #1
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 33028
  • Репутация: +26761/-0
    • Просмотр профиля
Тект должен быть в кавычках
info = "Мой текст"
28 Октября 2015, 12:15:34
Ответ #2
  • Фрилансер
  • *
  • Сообщений: 164
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Спасибо! Пробую..
28 Октября 2015, 13:00:12
Ответ #3
  • Фрилансер
  • *
  • Сообщений: 164
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Спасибо еще раз! Все пошло.
Но вот еще один момент.
В этом же скрипте в строке
SET `quantity` = `quantity` '.$qty.', ` info ` = '.$infoSUS.',  `date_add` = NOW()
При записи к количеству уже записанного прибавляется текущее
`quantity` = `quantity` '.$qty.'
А как сделать чтобы к тексту уже записанного прибавлялся текущий, так не работает
SET `quantity` = `quantity` '.$qty.', ` info ` = `info`'.$infoSUS.',  `date_add` = NOW()
Спасибо!
28 Октября 2015, 13:39:29
Ответ #4
  • Ветеран
  • *****
  • Сообщений: 2725
  • Репутация: +64/-4
  • Сообщество PrestaShop
    • Просмотр профиля
Чтобы добавлять текст его нужно сначала получить, потом в php склеить и заново сохранить. SQL запросом нельзя склеить текст.
28 Октября 2015, 14:44:22
Ответ #5
  • Фрилансер
  • *
  • Сообщений: 164
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Спасибо всем!!
Вопрос закрыт.