Как написать правильный запрос на обновление определенных слов в таблице 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.
Первый вариант из моего ответа прекрасно работает!
Комментариев нет:
Отправить комментарий