[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Странное поведение mysql_query('UPDATE... ')
Axion
Приветствую!

Не могу разглядеть у себя ошибку - может кто-то из сообщества с лучшим зрением ткнет меня носом?

Суть такова: есть некая форма из которой 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()
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.