Страницы

Поиск по вопросам

четверг, 11 июля 2019 г.

Правильный SQL запрос UPDATE на PHP

Как написать правильный запрос на обновление определенных слов в таблице wp_post?
Код, который обновляет слова:
UPDATE wp_posts SET post_content = REPLACE(post_content, 'слово1', 'замена1'); UPDATE wp_posts SET post_content = REPLACE(post_content, 'слово2', 'замена2'); UPDATE wp_posts SET post_content = REPLACE(post_content, 'слово3', 'замена3'); UPDATE wp_posts SET post_content = REPLACE(post_content, 'слово4', 'замена4'); UPDATE wp_posts SET post_content = REPLACE(post_content, 'слово5', 'замена5'); UPDATE wp_posts SET post_content = REPLACE(post_content, 'слово6', 'замена6');
Этот код работает в PHPmyAdmin но когда я делаю php файл который подключается к базе и отправляет SQL запрос, то тут уже мой код не работает я обращался к своему ХОСТЕРУ они говорят что нужно использовать "mysql_multi_query" что бы отправлять такой запрос пожалуйста кто нибудь напишите код как отправить такой запрос через этот multi_query я пробовал по мануалу php.net не получилось! У меня получился такой код
header('Content-Type: text/html; charset=utf-8'); $mysqli = new mysqli(тут мои данные);
/* проверка соединения */ if (mysqli_connect_errno()) { printf("Не удалось подключиться: %s
", mysqli_connect_error()); exit(); }
$query = "UPDATE wp_posts SET post_content = REPLACE(post_content, 'слово1', 'замена1');"; $query .= "UPDATE wp_posts SET post_content = REPLACE(post_content, 'слово2', 'замена2');"; $query .= "UPDATE wp_posts SET post_content = REPLACE(post_content, 'слово3', 'замена3');";
/* запускаем мультизапрос */ if ($mysqli->multi_query($query)) { do { /* получаем первый результирующий набор */ if ($result = $mysqli->store_result()) { while ($row = $result->fetch_row()) { printf("%s
", $row[0]); } $result->free(); } /* печатаем разделитель */ if ($mysqli->more_results()) { printf("Все ок.
"); } } while ($mysqli->next_result()); }
/* закрываем соединение */ $mysqli->close();


Ответ

А я предлагаю все запросы скомпоновать в один. То есть вместо
UPDATE wp_posts SET post_content = REPLACE(post_content, 'слово1', 'замена1'); UPDATE wp_posts SET post_content = REPLACE(post_content, 'слово2', 'замена2'); UPDATE wp_posts SET post_content = REPLACE(post_content, 'слово3', 'замена3');
пишем один запрос
UPDATE wp_posts SET post_content = REPLACE(post_content, 'слово1', 'замена1'), post_content = REPLACE(post_content, 'слово2', 'замена2'), post_content = REPLACE(post_content, 'слово3', 'замена3');
Все REPLACE выполняются за один раз.
Пример http://sqlfiddle.com/#!9/e9442/1
P.S. А по вашему коду скажу (в дополнении к комментарию): В цикле вам там ни чего не вернет, так как вы выполняете UPDATE запрос, а не выборку данных через SELECT
UPD
@msi в комментарии написал, что один столбец изменять несколько раз в UPDATE нельзя. Правда доказательств не предоставил. Тогда перепишу запрос по другому с вложенными REPLACE
UPDATE wp_posts SET post_content = REPLACE( REPLACE( REPLACE(post_content, 'слово1', 'замена1'), 'слово2', 'замена2'), 'слово3', 'замена3');
Пример http://sqlfiddle.com/#!9/e15f9b/1
UPD2
Протестировал утверждение @msi о том, что нельзя в UPDATE несколько раз менять поле на реальной базе mysql через phpmyadmin.
Первый вариант из моего ответа прекрасно работает!

Комментариев нет:

Отправить комментарий