Приветствую!
Не могу разглядеть у себя ошибку - может кто-то из сообщества с лучшим зрением ткнет меня носом?
Суть такова: есть некая форма из которой POST'ом передается ряд значений такому вот скрипту:
PHP |
$sql='UPDATE `cat_news` SET `news_date`="'.$temp_date.'", `preambula`="'.addslashes($_POST['preambula']).'", `news_body`="'.addslashes($_POST['news_body']).'" WHERE `id`='.$_GET['id']; $db->update_sql($sql); |
Как видно, этот скрипт дергает метод класса $db для выполнения запроса. Вот код этого метода:
PHP |
function update_sql($sql) { $this->last_query = $sql; $r = mysql_query($sql); if (!$r) { $this->last_error = mysql_error(); return false; } $rows = mysql_affected_rows(); if ($rows == 0) return true; else return $rows; } |
То есть совсем ничего хитрого. Но тем не менее при исполнении такого запроса - в строке в таблице, опреленной $_GET['id'], все значения сбрасываються в пустые. Причем если я сделаю вывод текста запроса на екран, а потом Ctrl+C/Ctrl+V в любой MySQL менеджер, то запрос отрабатывает как надо. Если я ставлю в $sql произвольный запрос без переменных (например, "UPDATE cat_news SET preambula = 'abcdef' WHERE id = 5") - он тоже срабатывает. Проверил нужные значения в массивах $_POST и $_GET - все на месте...
На всякий случай структура искомой таблицы:
SQL |
CREATE TABLE `cat_news` ( `id` bigint(20) unsigned NOT NULL auto_increment, `news_date` date NOT NULL, `preambula` varchar(1000) NOT NULL, `news_body` varchar(4000) default NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 |
Заранее благодарен за ответы.
Спустя 9 часов, 23 минуты, 38 секунд (3.05.2009 - 21:18) kirik написал(а):
Хм... Слабо вероятно что дело именно в этом, но если все остальное, как ты говоришь, верно, то тогда попробуй поменять двойные кавычки на одинарные:
PHP |
"UPDATE `cat_news` SET `news_date` = '{$temp_date}', `preambula` = '".addslashes($_POST['preambula'])."', `news_body` = '".addslashes($_POST['news_body'])."' WHERE `id` = {$_GET['id']}" |
Кстати $_GET['id'] обрабатывается? И вместо addslashes() лучше юзать mysql_escape_string(). И что содержится в переменной $temp_date?
Спустя 9 часов, 5 минут, 46 секунд (4.05.2009 - 06:23) Sylex написал(а):
Цитата (kirik @ 4.05.2009 - 00:18) |
И вместо addslashes() лучше юзать mysql_escape_string() |
Даже mysql_real_escape_string()