Мне нужно изменить какое-либо доменное имя на таблицу, содержащую адреса электронной почты (первичный ключ).
я попытался извлечь (с select
) полей, которые мне нужно обновить:Синтаксическая ошибка SQL, сгенерированная phpMyAdmin при обновлении поля
SELECT `Email`, CONCAT(
SUBSTRING_INDEX(`Email`, '@olddomain.', 1),
'@newdomain.',
SUBSTRING_INDEX(`Email`, '@olddomain.', -1)) AS NewMail
FROM `mailaddresses`
WHERE INSTR(`Email`,'@olddomain.')>0
Это прекрасно работает и дает мне старые и новые сообщения электронной почты.
Следит пример возвращаемых данных:
EMail NewMail
[email protected] [email protected]
[email protected] [email protected]
[email protected] [email protected]
Так что я пытался обновить с помощью следующего запроса:
UPDATE `mailaddresses`
SET `Email` = CONCAT(
SUBSTRING_INDEX(`Email`, '@olddomain.', 1),
'@newdomain.',
SUBSTRING_INDEX(`Email`, '@olddomain.', -1))
WHERE INSTR(`Email`, '@olddomain.')>0
Но PHPMYADMIN говорит, что есть ошибка синтаксиса SQL.
1064 - У вас возникла ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с '1)' @newdomain. ' SUBSTRING_INDEX (
mailaddresses
WHER «в строке 2
Я заметил, что две запятые»,»отсутствуют в сообщении об ошибке, так что я думаю, что PhpMyAdmin делает что-то противное там ,
EDIT:
я понял, что мой SQL-код полностью работает, потому что я проверил это на консоли MySQL, и это работает прекрасно. Я думаю, что у меня проблемы с PhpMyAdmin (я не знаю, какие проблемы, хотя).
Вот некоторые данные из моей домашней странице Xampp/PhpMyAdmin:
Сервер базы данных
сервер: 127.0.0.1 через TCP/IP
Сервер Тип: MySQL
Версия сервера: 5.6.24 - MySQL Community Server (GPL)
версия протокола: 10
веб-сервер
Apache/2.4.12 (Win32) OpenSSL/1.0.1l PHP/5.6.8
клиент базы данных ве rsion: libmysql - mysqlnd 5.0.11-DEV - 20120503 - $ Id: 3c688b6bbc30d36af3ac34fdd4b7b5b787fe5555 $
расширение PHP: MySQLi
PHPMYADMIN информация
Версия: 4.3.11
Я уверен, что это потому, что я побежал мой код SQL с vb.net, и он сработал.
Итак, мои вопросы:
Есть ли у кого такая же проблема?
Как я могу это решить?
Какова синтаксическая ошибка? –
кажется, что это поле имеет уникальный индекс, и после таких изменений вы получаете дубликаты записей. поэтому сообщайте об ошибках, чтобы их можно было проверить. –
Я не знаю, откуда исходит ваша синтаксическая ошибка, но, похоже, вы пытаетесь повторно реализовать замену-функцию mysql. Возможно, лучше использовать это вместо: http://dev.mysql.com/doc/refman/5.5/en/string-functions.html#function_replace –