Добрый день. Разбираю rss, выполняю вставку в базу данных: Код (Text): $insertResult = mysql_query ("INSERT IGNORE INTO tPost (post_title, post_url, post_text, post_pub_date) VALUES ('$post_title', '$post_url', '$post_text', '$post_pub_date')"); Все отлично, но вместо pubDate из RSS, в базу записываются нули: 0000-00-00 00:00:00 Что я сделал для поиска причины: 1. Тип данных в БД: пробовал и DATETIME и TIMESTAMP - не помогло 2. вывел эхом, что содержится в $post_pub_date: Fri, 18 Apr 2014 17:29:46 +0000. Данные в переменной есть 3. Подумал, что может дело в несоответствии знаков (тут больше, чем отражается в БД), преобразовал Код (Text): $post_pub_date_new = date('F d, Y H:i',strtotime($item->pubDate)); Вывел на печать: April 18, 2014 21:24, ОК. Не помогло. 4. Подумал, что может есть какая-то проблема с типом данных (в доках пишут, что если при типе поля Дата посылать данные не того типа, будет nul). Применил Код (Text): strtotime($post_pub_date); Не помогло 5. Ну и крутил всякие комбинации с типом данных ячейки (DATETIME и TIMESTAMP) для каждого раза))) Мало ли )) Тоже не помогло. Т.е. данные в переменной есть, тип данных вроде верный, INSERT выполняется, но БД почему-то данные принимать не хочет(( Помогите плиз
не много не понял где изначальная дата - то вы вставляете $post_pub_date в базу но при этом делайте strtotime($item->pubDate) так что откуда вытекает =)
Вот полная версия)) Код (Text): foreach ($rss->channel->item as $item) { $post_title = $item->title; $post_url = $item->link; $post_text = $item->description; $post_pub_date = $item->pubDate ; $post_pub_date_new = date('F d, Y H:i',strtotime($item->pubDate)); $d1 = strtotime($post_pub_date); // переводит из строки в дату } $insertResult = mysql_query ("INSERT IGNORE INTO tPost (post_title, post_url, post_text, post_pub_date) VALUES ('$post_title', '$post_url', '$post_text', '$d1')"); } Что происходит: Беру RSS и разбираю его на элементы. Дальше делаю для проб аж 3 разные переменные, которые пытаюсь записать в базу: 1. $post_pub_date - то, что я непосредственно вытащил из RSS. Как я вижу с помощью echo, $post_pub_date выдает значения вида Fri, 18 Apr 2014 17:29:46 +0000 Я подумал, вдруг проблема в том, что тут больше знаков, чем количество знаков, которое я вижу в базе - 0000-00-00 00:00:00, поэтому: 2. сделал Код (Text): $post_pub_date_new = date('F d, Y H:i',strtotime($item->pubDate)); - она выдает April 18, 2014 21:24 3. Ну и еще сделал Код (Text): $d1 = strtotime($post_pub_date); - предполагая, что так уж гарантировано превратил содержимое переменной в тип "Дата", если там было что-то не то, например строка Все эти переменные по очереди я пробую в Инсерте: Код (Text): $insertResult = mysql_query ("INSERT IGNORE INTO tPost (post_title, post_url, post_text, post_pub_date) VALUES ('$post_title', '$post_url', '$post_text', '$d1')"); Все другие данные - post_title, post_url и пр. Инсерт пишет в базу ОК, но для post_pub_date - пишет нули. Тип данных в таблице пробую и datetime и timestamp, но все равно нули. Где ошибка? Спасибо Добавлено спустя 1 минуту 5 секунд: Чувствую, вы знаете больше, чем говорите )) Дайте плиз чуть больше подсказок )) Спасибо!
в понимании того, что такое запрос. =) это строка. а дату в мускул надо засовывать в виде строки, которую он хочет: 0000-00-00 00:00:00
ВАУ!!!! Получилось! ))) Сделал Код (Text): $post_pub_date_new = date('Y-m-d G:i:s',strtotime($item->pubDate)); , т.е. перевел то, что получал из RSS принудительно в формат 2014-04-19 0:13:23, и все заработало! Т.е. получается дело не только (или не столько) в "типе данных", сколько в соответствии некоему формату записи? Жаль, что я нигде не встретил это простое указание, а казалось бы весь интернет перевернул. Вот казалось бы, что сложного указать в доках, что "если хотите записать дату в MySQL в ячейку с типом данных DateTime, приведите строку к виду 000-00-00 00:00:00". Но что-то я нигде такого указания не встречал. Кстати, (это уже просто любознательность), а если установить в базе у ячейки тип данных TimeStamp, то тут к какому виду надо было бы приводить строку? Ну и еще раз огромное спасибо за помощь! (Уважаемые профессионалы, в любом случае буду рад дополнительным комментариям и пояснениям. Спасибо!)
Лишнее подтверждение тому, что техническую документацию тоже надо уметь читать)) Спасибо! Перечитал и переосмыслил))