2013-02-09 6 views
0
$insert = mysql_query(" 
    INSERT into analytics.pagesummary (Date, avg_load_time, min_load_time, max_load_time) 
    VALUES ($date,$string_avg, $string_min,$string_max)") 
    or die('PROBLEM'.mysql_error()); 

Фактические значения даты = '2013-02-07', '2013-02-08', '2013-02-09' Дата значения в базе данных после того, как запрос обжигают = '2004', '2003', '2002'MySQL вставляя другое значение

Другие значения отображается в avg_load_time, min_load_time & max_load_time являются правильными.

Где мы будем не так. Любая помощь будет оценена по достоинству.

+0

[** Пожалуйста, не используйте 'mysql_ *' функции в новом коде **] (http://bit.ly/phpmsql). Они больше не поддерживаются [и официально устарели] (https://wiki.php.net/rfc/mysql_deprecation). См. [** красное поле **] (http://j.mp/Te9zIL)? Узнайте о [* подготовленных операторах *] (http://j.mp/T9hLWi) и используйте [PDO] (http://php.net/pdo) или [MySQLi] (http://php.net/ mysqli) - [эта статья] (http://j.mp/QEx8IB) поможет вам решить, какой из них. Если вы выберете PDO, [здесь хороший учебник] (http://j.mp/PoWehJ). – j0k

ответ

1

, поскольку значения не завернуть в одиночной кавычки и MySQL неявно значения бесшумно, она должна быть

INSERT INTO analytics.pagesummary (Date, avg_load_time, min_load_time, max_load_time) 
VALUES ('$date', '$string_avg', '$string_min', '$string_max') 

Причина, почему 2013-02-07 при вставке становится 2004 происходит потому, что он выполняет arithmethic операцию таким образом, что

2013 - 02 = 2011 - 07 = 2004 
2013 - 02 = 2011 - 08 = 2003 
2013 - 02 = 2011 - 09 = 2002 

Как Замечание, запрос уязвим с SQL Injection, если значение (s) переменными пришло извне. Пожалуйста, ознакомьтесь с приведенной ниже статьей, чтобы узнать, как ее предотвратить. Используя PreparedStatements, вы можете избавиться от использования одинарных кавычек вокруг значений.

Смежные вопросы