2016-04-06 9 views
0

Я пытаюсь сохранить строку базы данных. Но я всегда ошибаюсь.Я не могу Вставить строку в базу данных, используя php

Мой код:

function save_activation_key($connection, $username, $key) { 
    $date = time(); 
    $is_used = 0; 
    $query = "INSERT INTO account_activation_key ( key, date, is_used) 
    VALUES ( '" . $username . "'," 
       . " '" . $date . "'," 
       . " '" . $is_used . "')"; 
    $retval = mysql_query($query, $connection); 
    echo $retval; 
    $retval = mysql_query($query, $connection); 
    if(! $retval) 
    { 
     die('Could not enter data: ' . mysql_error()); 
    }  
} 

В $connection действует подключение к базе данных.

Структура базы данных:

id : int 
key: varcha(45) 
date: date 
is_used: tinyint(1) 

Когда я звоню мой код, я получаю ошибку:

Could not enter data: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'key, date, is_used) VALUES ( 'uzivatelsky_jmeno', '1459971829', '0')' at line 1 

Где проблема?

Спасибо за помощь

+0

Можете ли вы 'echo' ваш оператор запроса и проверить, если это действительно? – Maximus2012

+0

Пожалуйста, не используйте [ 'расширение mysql_' базы данных] (http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php), он устарел (ушел навсегда в PHP7) Особенно, если вы только учитесь PHP, тратить свои силы обучения 'PDO' или' mysqli_' расширения базы данных, [а вот некоторая помощь, чтобы решить, какой из них использовать] (http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php) – RiggsFolly

ответ

3

key является MYSQL зарезервированного слова и не должен действительно быть использован в качестве имен столбцов.

MYSQL Reserved Words List can be found here https://dev.mysql.com/doc/refman/5.7/en/keywords.html

Однако, если вы обмотаете эти имена столбцов в обратные ссылки, вы можете уйти от него.

Вы также можете упростить запрос конкатенации, как в следующем, что делает его намного проще для отладки.

function save_activation_key($connection, $username, $key) { 
    $date = time(); 
    $is_used = 0; 
    $query = "INSERT INTO `account_activation_key` 
        ( `key`, `date`, `is_used`) 
       VALUES ('$username', '$date', '$is_used')"; 

    $retval = mysql_query($query, $connection); 
    echo $retval; 
    $retval = mysql_query($query, $connection); 
    if(! $retval) 
    { 
     die('Could not enter data: ' . mysql_error()); 
    }  
} 

BIG NOTE

Please dont use the mysql_ database extension , it is deprecated (gone for ever in PHP7) Which means this code will never run when all that is available is PHP7 or greater. Especially if you are just learning PHP, spend your energies learning the PDO or mysqli_ database extensions, and here is some help to decide which to use

+0

только 'key' является Smokey, а не' date'. –

+0

Я знал, что вы согласитесь с этим комментарием. Arternoon Ralph @ Fred-II- – RiggsFolly

+0

* Во второй половине дня Smokey * –

-2

, вероятно, ваш запрос содержит ошибку в том месте, где вы предоставляете целое число в виде строки, как ваша строка «». $ Имени пользователя. «» . «'». $ « ». «

должно быть: « ». $ username." ', ". , $ date. », "". $ Is_used. "

целых should'nt быть одиночным qoutes" '"

вероятно, это ошибка!

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