2013-06-03 3 views
-1

У меня есть проблема в хранении переменной $ даты в столбце базы данных под названием данных типа varchar(50)

Это код даты переменной

$date = date("Y-m-d"); 
echo $date; 

и это код, который хранит его в базу данных (обратите внимание, что дата такой же один)

что проблема с моим кодом

$sql="INSERT INTO 
    Students(FirstName, LastName,gender,Major,Favorite_courses,GPA,date) 
VALUES 
    ('$_POST[firstname]','$_POST[lastname]','$_POST[sex]','$_POST[major]', 
    '$_POST[favorite]','$_POST[GPA]','$date')"; 
+1

Любая причина, по которой тип столбца не имеет тип 'DATE'? Также вы получаете сообщения об ошибках? Что происходит? –

+0

1-й, в чем проблема, 2-й, почему вы весны в карцерном поле? –

+3

OH! Вы должны быть людьми, которые хорошо знакомы с [Bobby Tables] (http://bobby-tables.com/) – cwallenpoole

ответ

4

Измените тип столбца на DATE, а затем используйте SYSDATE как значение для ввода текущей даты/времени на SQL-сервере.

Кроме того, ознакомьтесь с SQL-инъекцией!

+2

Обратите внимание, что 'SYSDATE()' использует время сервера, на котором запущена RDBMS, которая * не * должна быть тем же хостом, что и тот, в котором работает PHP-скрипт, поэтому есть вероятность, что эти даты не совпадают, если они просто «не синхронизированы» или настроены, или фактически в разных часовых поясах и т. д. – RobIII

+0

Хорошая точка, @RobIII. Есть ли способ форматировать определенный часовой пояс при использовании 'SYSDATE'? – nhinkle

+0

я сделал это, но до сих пор ничего не происходит, это мой код, что ошибка на этом ______________ $ SQL = "INSERT INTO студентов (FirstName, LastName, пол, майор, Favorite_courses, ГПД, дата) ЗНАЧЕНИЯ ('$ _POST [Firstname]», '$ _ POST [фамилия]', '$ _ POST [секс]', '$ _ POST [главная]', '$ _ POST [любимый]', '$ _ POST [GPA]', 'SYSDATE') «; уведомление Я положил SYSDATE в конце – sabsab

2

Технически ваш код должен работать, но на практике он, несомненно, потерпит неудачу.

Для начала вы никогда не должны вводить данные POST непосредственно в вашу базу данных. В зависимости от того, что находится в этих данных, он, по крайней мере, сломает ваш оператор SQL. Он также может уничтожить вашу базу данных, если кто-то ввел некоторый SQL в переменную POST.

Не делайте этого. Вы должны дезинформировать любые данные, поступающие из внешнего мира, прежде чем вставлять их в базу данных. Существует несколько классов базы данных PHP, которые делают это за вас. Мне нравится PDO.

Кроме того, напишите лучше PHP, используя $ _POST ['favorite'] вместо $ _POST [favorite]. Что произойдет, если вы сделаете это в своем коде где-нибудь define('favorite', 'foobar')?

Что происходит, так это то, что ваш код будет искать $ _POST ['foobar'] вместо $ _POST ['favorite'].

Вам действительно нужно работать над своими знаниями в области PHP и SQL, прежде чем все что-то произойдет в дикой природе, или у вас возникнут проблемы. Но продолжайте подключаться, вы получите это.

1

Кроме того, уже несколько раз упоминалось, SQL injection: используйте date('c') (или более конкретно: ISO8601 notation). Это приведет к коду, как:

$query = "insert into mytable (myfield) values ('" . date('c') . "')"; 

что приведет в запросе, как:

insert into mytable (myfield) values ('2013-06-03T22:20:32+02:00') 

Это unambigious обозначения и всегда должны работать (Y-m-d будет работать нормально тоже, как на ваш вопрос, он сохраняет только дату без какого-либо времени). При использовании любых других обозначений всегда существует проблема для РСУБД, которую она должна знать, она должна интерпретировать 02/12/1977 как 12 февраля 1977 года или 2 декабря 1977 года. Также убедитесь, что myfield (в моем примере) имеет тип DateTime или Date и неvarchar и что вы правильно бежать reserved words как date в querystrings:

select foo, bar, `date`, foobar from mytable.... 

Однако, MySQL, кажется, «позволить» date (из-за которым глупая причина «MySQL permits some keywords to be used as unquoted identifiers because many people previously used them.»).Лучше всего придерживаться спасаясь всегда:

select `foo`, `bar`, `date`, `foobar` from `mytable` .... 

Пожалуйста, обратите внимание, что я не использовать какой-либо MySQLi или PDO prepared statements в этом примере; вы должны почитать читать SQL injection, а затем по этим темам и затем вернитесь к своему коду.

+0

Вау, это много мастер @Roblll. Я сделаю все возможное, чтобы развить мое само слово. – sabsab

-1

Вы можете использовать дату класса php и использовать функцию его формата

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