Уважаемые форумчане, очень надеюсь на вашу помощь. У самого уже голова кипит. Есть код: Код (Text): $namenew = 'hello2'; $name = 'Hello'; $query = "UPDATE posters SET `poster` = REPLACE(`poster` , '{$name}', '{$namenew}')"; Этот запрос находит в поле poster $name и меняет ее на $namenew. Все бы хорошо, НО: В поле poster может быть следующие данные: привет, бла-бла-бла <a href='ссылка'>Hello</a>... или такое: [ php ] <?php echo 'Hello'; ?> [ /php ] Так вот, нужно проверить , находиться ли слово из переменной $name(в нашем случае Hello) между определенных тегов. В нашем случае: <a href='ссылка'> и </a> или [ php ] и [ / php ]. И если находиться, то не менять. P.S. php - теги без пробелов Скажите как это сделать?
Спасибо. Но думаю не получиться, поскольку там может быть уже записанно <a href='ссылка'>А здесь здругое которое не нужно убирать</a> Добавлено спустя 10 минут 22 секунды: И как использовать WHERE с UPDATE? Можете на моем примере показать?
В одном запросе можно совместить несколько условий: Код (Text): UPDATE posters SET `poster` = REPLACE(`poster` , '{$name}', '{$namenew}') WHERE poster NOT_LIKE "<a href='ссылка'>%$name%</a>" OR poster NOT_LIKE "php%$name%php"; проверяйте чтобы $name не ломала sql ситаксис
Я не очень в SQL силен. Скажите а как в <a href='ссылка'> подставить любое значение? Я так понимаю * - звездочку?
SQL ломается... $name = <a href=ссылка>ссыль</a> Ответ: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '<a href=ссаль>ссыль</a>) WHERE article NOT_LIKE "<a' at line 1 Добавлено спустя 16 секунд: Я так понимаю это из-за пробела в <a Добавлено спустя 6 минут 49 секунд: аа нет, не из-за пробела
Вот есть кусок на который ругается NOT_LIKE "<a href='ссылка'>%$name%</a>" экранируем параметр функции NOT_LIKE: mysql_real_escape_string("<a href='ссылка'>%".$name."%</a>");
Я конечно извиняюсь, но я уже так с этим запросом запутался. Можете мне полностью написать весь запрос. Пожалуйста... Начиная с $query Очень буду благодарен.
tt на mysql_real_escape_string замените, но лучше это http://php.ru/manual/mysqli.real-escape-string.html Код (Text): $name = 'john'; $namenew = 'SMITH'; function tt($str) { return $str; } $query = "UPDATE posters SET `poster` = REPLACE(`poster` , '{".$name."}', '{".$namenew."}') WHERE poster NOT_LIKE \"".tt("<a href='ссылка'>")."%".tt($name)."%".tt("</a>")."\" OR poster NOT_LIKE \"php%".tt($name)."%php\";"; echo $query;
Щяс сдохну Запрос: UPDATE posters SET `posters` = REPLACE(`poster` , '{Kohana}', '{Kohana}') WHERE poster NOT_LIKE "%Kohana%" OR poster NOT_LIKE "php%Kohana%php"; Ошибка: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NOT_LIKE "%Kohana%" OR article NOT_LIKE "php%Kohana' at line 1
Код (Text): CREATE TABLE IF NOT EXISTS `posters` ( `id` int(11) NOT NULL AUTO_INCREMENT, `poster` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ; INSERT INTO `posters` (`id`, `poster`) VALUES (1, 'Hello'), (2, '<a href=''http://example.ru''>Hello</a>'), (3, '<?php echo ''Smith'' ?>'); Код (Text): $name = "Hello"; $namenew = "Bye"; $query = "UPDATE `posters` SET `poster`= REPLACE(`poster` , '".$mysqli->real_escape_string($name)."', '".$mysqli->real_escape_string($namenew)."') WHERE `poster` = '".$mysqli->real_escape_string($name)."' ";
Ааааа черт! Я не посмотрел код, а просто вставил и увидел , что все работает. Но когда разобрался понял что совсем не так(( Этот запрос просто меняет поле с название переменной, но если в поле есть пробел, то он не меняет ее.(((
Есть такие (1, ' Hello'), (2, ' Hello test test'), ? Можно по говнокодить Код (Text): $query = "UPDATE `posters` SET `poster`= REPLACE(`poster` , '".$mysqli->real_escape_string($name)."', '".$mysqli->real_escape_string($namenew)."') WHERE `id` NOT IN (SELECT `id` FROM (SELECT `posters`.`id` FROM `posters` WHERE poster LIKE '<a href=\'http://example.ru\'>%".$mysqli->real_escape_string($name)."%</a>') AS A )"; http://dev.mysql.com/doc/refman/5.0/en/string-functions.htm ... on_replace Код (Text): mysql> SELECT REPLACE('www.mysql.com', 'w', 'Ww'); -> 'WwWwWw.mysql.com'
Этот код не работает. Пока я с ума не сошел. Я спать, и всем того же желаю. В любом случае, тебе metadon большущее спасибо.
Потом выложи дамп mysql базы, так как те запросы которые я написал, они работают на тестовой базе которую я выше выложил