2016-02-02 2 views
-1

Мне нужно изменить какое-либо доменное имя на таблицу, содержащую адреса электронной почты (первичный ключ).
я попытался извлечь (с 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 (Email «@olddomain.»,)) FROM 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, и он сработал.

Итак, мои вопросы:
Есть ли у кого такая же проблема?
Как я могу это решить?

+0

Какова синтаксическая ошибка? –

+0

кажется, что это поле имеет уникальный индекс, и после таких изменений вы получаете дубликаты записей. поэтому сообщайте об ошибках, чтобы их можно было проверить. –

+0

Я не знаю, откуда исходит ваша синтаксическая ошибка, но, похоже, вы пытаетесь повторно реализовать замену-функцию mysql. Возможно, лучше использовать это вместо: http://dev.mysql.com/doc/refman/5.5/en/string-functions.html#function_replace –

ответ

0

Это выглядит из вашего вопроса, что вы используете устаревшую версию PHPMYADMIN плюс тот же запрос, по-видимому, работает, когда работал на самой консоли MySQL. Поэтому я предлагаю вам обновить phpMyAdmin до последней версии. На момент написания - v4.5.4.1.

Здесь changelogs.

0

Вы можете использовать функцию строки REPLACE(str,from_str,to_str) для изменения части любого значения поля ...

UPDATE mailaddresses 
    SET email = REPLACE(email, '@olddomain.', '@newdomain') 
WHERE INSTR(email, '@olddomain.') > 0 

Пример:

mysql> set @olddomain = '@google.com'; 
Query OK, 0 rows affected (0.00 sec) 

mysql> set @newdomain = '@gmail.com'; 
Query OK, 0 rows affected (0.00 sec) 

mysql> set @email = '[email protected]'; 
Query OK, 0 rows affected (0.00 sec) 

mysql> select replace(@email, @olddomain, @newdomain) as modified_email; 
+-----------------------+ 
| modified_email  | 
+-----------------------+ 
| [email protected] | 
+-----------------------+ 
1 row in set (0.00 sec) 

mysql> 
+0

Я не понимаю, что происходит: я получаю синтаксическую ошибку и снова в запятые сообщения об ошибке отсутствуют – genespos

Смежные вопросы