Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по MySQL 
:(
    Опции темы
aktuba
Дата 22.8.2007, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: нет
Всего: 38



Есть таблица в базе. В таблице есть поле, тип DATETIME. Хочу туда занести дату время, делаю следующее:
Код

$date=time();
$sql="INSERT INTO tbltemp VALUES(NULL, '$date')";
mysql_query($sql);


Не работает. Заносятся нули. Почему?


--------------------
user posted image
PM MAIL WWW Skype   Вверх
Rigel
Дата 22.8.2007, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 24.7.2007
Где: Москва

Репутация: нет
Всего: нет



Цитата(aktuba @ 22.8.2007,  12:14)
Есть таблица в базе. В таблице есть поле, тип DATETIME. Хочу туда занести дату время, делаю следующее:
Код

$date=time();
$sql="INSERT INTO tbltemp VALUES(NULL, '$date')";
mysql_query($sql);


Не работает. Заносятся нули. Почему?

Я не знаю всю структуру таблицы, однако сильно подозреваю, что твое поле стоит не вторым... Пиши лучше так:
$sql="INSERT INTO `tbltemp` (field, date) VALUES('$wr',NOW())";
И будет тебе щастье...
--------------------
С уважением. Rigel. http://www.smoliy.ru
PM MAIL WWW ICQ   Вверх
aktuba
Дата 22.8.2007, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: нет
Всего: 38



Цитата

Я не знаю всю структуру таблицы, однако сильно подозреваю, что твое поле стоит не вторым... Пиши лучше так:
$sql="INSERT INTO `tbltemp` (field, date) VALUES('$wr',NOW())";
И будет тебе щастье... 


Да суть не в этом. Да, оно не второе, но до него и после все нормально вставляется, а именно оно нет. Полный запрос выглядит примерно так:
Код

function dosql($login,$pass,$str) {
$md5=md5($pass);
$date=time();
$sql="INSERT INTO tbltemp(id,login,passwd,date,str) VALUES(NULL,'$login','$md5','$date','$str')";
}


Это сообщение отредактировал(а) aktuba - 22.8.2007, 12:32


--------------------
user posted image
PM MAIL WWW Skype   Вверх
Rigel
Дата 22.8.2007, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 24.7.2007
Где: Москва

Репутация: нет
Всего: нет



Цитата(aktuba @ 22.8.2007,  12:31)
Цитата

Я не знаю всю структуру таблицы, однако сильно подозреваю, что твое поле стоит не вторым... Пиши лучше так:
$sql="INSERT INTO `tbltemp` (field, date) VALUES('$wr',NOW())";
И будет тебе щастье... 


Да суть не в этом. Да, оно не второе, но до него и после все нормально вставляется, а именно оно нет. Полный запрос выглядит примерно так:
Код

function dosql($login,$pass,$str) {
$md5=md5($pass);
$date=time();
$sql="INSERT INTO tbltemp(id,login,passwd,date,str) VALUES(NULL,'$login','$md5','$date','$str')";
}

Значит, формат даты в переменной неверный. Если нужно вставить дату текущего момента, напиши так, как я показал в предыдущем письме - команда NOW()
--------------------
С уважением. Rigel. http://www.smoliy.ru
PM MAIL WWW ICQ   Вверх
silverghost
Дата 22.8.2007, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 11.12.2005
Где: Россия, Тольятти

Репутация: нет
Всего: нет



Если не нравится формат то можно и так 
Код

$sqli1 = "INSERT INTO themes VALUES('$uid', '$header', ' ".date("d.m.Y h:i")." ')";

PM MAIL ICQ   Вверх
-=Ustas=-
Дата 22.8.2007, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 32
Всего: 69



Цитата(aktuba @  22.8.2007,  12:14 Найти цитируемый пост)
Есть таблица в базе. В таблице есть поле, тип DATETIME. Хочу туда занести дату время, делаю следующее:

У тебя в SQL запросе несовпадение типов, т.к. ты пихаешь в это поле целое число
Код

$date=time();

Лучше всего, ( если тебе не нужно будет вычислять даты рождения в полях дат) используй тип INT, забивай туда даты как time() ( т.е. интеджер ) и не будет у тебя никаких проблем.


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
aktuba
Дата 22.8.2007, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: нет
Всего: 38



-=Ustas=-, спасибо за подробное объяснение. +


--------------------
user posted image
PM MAIL WWW Skype   Вверх
BrainWorker
Дата 22.8.2007, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 9.8.2007
Где: Дубна, Россия

Репутация: 1
Всего: 2



Цитата(aktuba @ 22.8.2007,  12:31)
Да суть не в этом. Да, оно не второе, но до него и после все нормально вставляется, а именно оно нет. Полный запрос выглядит примерно так:
Код

function dosql($login,$pass,$str) {
$md5=md5($pass);
$date=time();
$sql="INSERT INTO tbltemp(id,login,passwd,date,str) VALUES(NULL,'$login','$md5','$date','$str')";
}

Ты в своем запросе полю id (как я понимаю это первичный ключ) ставишь значени NULL!
Если ты полагаешься на автоматическую генерация ключа при создании новой записи, то не указывай id в списке полей запроса INSERT, но если указываешь, то указывай разумные и допустимые значения.

ID не может быть NULL ПО ОПРЕДЕЛЕНИЮ

Это сообщение отредактировал(а) BrainWorker - 22.8.2007, 18:05
PM MAIL Jabber   Вверх
sw04
Дата 23.8.2007, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 372
Регистрация: 22.1.2007
Где: Ufa

Репутация: нет
Всего: 18



Код

function dosql($login,$pass,$str) {
$sql="INSERT INTO tbltemp SET login='".$login."',
                                           passwd='".md5($md5)."',
                                           date='".time()."',
                                           str='".$str."';");
}

почему бы не так?

Это сообщение отредактировал(а) sw04 - 23.8.2007, 00:21


--------------------
<удалено администрацией>
PM   Вверх
SelenIT
Дата 23.8.2007, 01:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



Цитата(-=Ustas=- @  22.8.2007,  16:25 Найти цитируемый пост)
в SQL запросе несовпадение типов, т.к. ты пихаешь в это поле целое число


-=Ustas=-, т.е. если в DATETIME-поле сунуть число, например, 20070823 или 20070823125959, то в итоге из-за несовпадения типов запишется дата 0000-00-00 00:00:00? В каких случаях и для каких типов таблиц это так (только что поэкспериментировал с MyISAM - не воспроизвелось, записалась сегодняшняя дата...)? Ни в коей мере не хочу снова поднять холивор на тему "INT vs. DATETIME", просто спрашиваю;)


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Severyanin
Дата 23.8.2007, 07:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 31.7.2007
Где: Россия, Омск

Репутация: нет
Всего: 9



Для MyISAM вообще обычно выдает ошибку записи - несовпадение типов, и не записывает ничего. Оператор INSERT  не выполняется.


--------------------
"Звонким вереском скроются наши следы, и не вспомнят о них. Кто поверит нам, рыцарям павшей звезды из отвергнутых книг? Пусть в узоре времен ни стихов. ни имен, но напомнит забывшим их полуночный крик." Тэм Гринхилл
"Ужели суслик твоего коварства нагадит в плов доверья моего?". Л.Филатов 
PM MAIL WWW ICQ   Вверх
sTa1kEr
Дата 23.8.2007, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



Цитата(SelenIT @  23.8.2007,  01:11 Найти цитируемый пост)
 т.е. если в DATETIME-поле сунуть число, например, 20070823 или 20070823125959, то в итоге из-за несовпадения типов запишется дата 0000-00-00 00:00:00? В каких случаях и для каких типов таблиц это так (только что поэкспериментировал с MyISAM - не воспроизвелось, записалась сегодняшняя дата...)?

Нет, во всех типах таблицах все будет записываться корректно, если, конечно, формат верный и mysql удастся распарсить число. The DATETIME, DATE, and TIMESTAMP Types - здесь все подробно расписано как работает MySQL с датами.
Цитата

As a number in either YYYYMMDDHHMMSS or YYMMDDHHMMSS format, provided that the number makes sense as a date. For example, 19830905132800 and 830905132800 are interpreted as '1983-09-05 13:28:00'. 
As a number in either YYYYMMDD or YYMMDD format, provided that the number makes sense as a date. For example, 19830905 and 830905 are interpreted as '1983-09-05'. 

Цитата

Illegal DATETIME, DATE, or TIMESTAMP values are converted to the “zero” value of the appropriate type ('0000-00-00 00:00:00', '0000-00-00', or 00000000000000). 

Единственный момент, когда могут быть проблемы с датами - это при работе через pdo_mysql с Prepared Statements. При биндинге даты она должна быть формата YYYY-MM-DD HH:MM:SS. Хотя это могли уже поправить, я не проверял.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0821 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.