Помощь - Поиск - Пользователи - Календарь
Полная версия: MySQL 4-->5 и REPLACE
Форум на все случаи жизни > Программирование, скрипты, графика, WEB-строительство > WEB дизайн и прикладное программирование
mikolas
При переходе на 5-й MySQL всплыл неприятный момент.

Есть запрос типа REPLACE table SET id='new', name='name'
он используется в форме редактирования или добавления новых записей.
То есть если создаем запись то в колонку id вставляем неверное значение new, если редактируем - то соотвественно передаем нужный АйДишник.

Так вот 4-й мускул обрабатывал такой запрос и автозаменял ID своим авто инкрементом. 5-й же выдает ошибку типа id должно быть цифровым и все тут...

Встал вопрос. Это была фича 4-го мускула, или это баг 5-го?

з.ы. вместо REPLACE можно использовать INSERT, с неформатным ID. Так же в 5-м всплывает ошибка.
KnyazIVK
У меня аналогичная проблема! кто-нибудь знает решение?
EzS
Если я правильно понял:

Вытаскивается таблица из базы, надо обновить колонку name, но по идее этот name вытаскивается по идентификатору, соответственно надо обновить полностью все данные из таблицы.

Код
UPDATE $tbl SET id=ID, name=NAME WHERE ...... и так далее


Удачи

P.S. http://mysql.org
mikolas
Неее,
Может я не так сформулировал...

Смысл в том что 4-й мускул не ругался если я в цифровую колонку вставлял текстовую строку. Он её заменял на 0.
5-й MySQL ругается и не выполняет запрос.

В случае когда я пытался сделать REPLACE и указывал в качестве идентификатора заведомо несуществующий ID - он создавал новую строку с уникальным ID. Заведомо несуществующим, в данным случае, может быть только текстовая строка.


p.s. UPDATE не может быть использован, потому как данные не только обновляются но и при необходимость создаются.
EzS
Значит я не понял.

Выход, по крайней мере я так реализовывал у себя, таков:

В качестве решения можно сделать так. Создать три запроса
1. на вставку новой записи
2. на обновление записи
3. на удаление

Вопрос еще: а что у вас за поле в ID, в name понятно - TEXT или LONGTEXT. ID по идее должен быть INT с автоинкрементом, как у вас?

P.S. Может мы о разных вещах говорим? Я не понимаю зачем ID делать буквенным
The Undertaker
открой конфиг мускула и найди там строку sql-mode, удали из нее параметр STRICT_TRANS_TABLES и заработает
EzS
А если у него нет к конфигу доступа?
MadCoder
Цитата
REPLACE table SET id='new', name='name'


Я думаю, что это в корне неверно - вообще пытаться подсунуть значение туда, где MySQL сам должен ставить автоинкремент. А тем более пихать туда данные несоответствующего типа.
Как нам говорила когда-то учитель математики: "Не умножайте сапоги на пряники..."

INSERT INTO table (name) values('name');
..
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.

Русская версия Invision Power Board © 2001-2024 Invision Power Services, Inc.

Warning: require_once(/var/www/bestfil1/public_html/setlinks_0d98c/slsimple.php) [function.require-once]: failed to open stream: No such file or directory in /var/www/bestfil1/public_html/forums/lofiversion/index.php on line 355