Синтаксис MySQL: у вас ошибка в синтаксисе SQL ... - PullRequest
0 голосов
/ 09 мая 2011

Я получаю следующую ошибку из приведенного ниже кода.

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 '@doe.com,username,5f4dcc3b5aa765d61d8327deb882cf99,09/05/2011 1:11:13 AM)' at line 1

$username = $_GET['username'];
$password = md5($_GET['password']);
$firstname = $_GET['firstname'];
$lastname = $_GET['lastname'];
$email = $_GET['email'];
$date = uk_date();
$conn = mysql_connect('localhost', 'myuser', 'mypass');
mysql_select_db('dbname');
$query = "INSERT INTO accounts (FirstName, LastName, Email, Username, Password, LastLoginDate) VALUES (". $firstname . ",". $lastname ."," . $email . "," . $username . "," . $password . "," . $date . ")";
$result = mysql_query($query) or die(mysql_error());
echo 'Success';
mysql_close($result);

Пожалуйста, не могли бы вы дать мне знать, в чем моя проблема? Я новичок в MySQL и PHP, поэтому, пожалуйста, не могли бы вы объяснить, что я сделал неправильно, для дальнейшего использования.

Ответы [ 3 ]

5 голосов
/ 09 мая 2011

Вы не указали ни одного из значений в вашей INSERT, вы должны сказать что-то вроде этого:

$query = "INSERT INTO accounts (FirstName, LastName, Email, Username, Password, LastLoginDate) VALUES ('". $firstname . "','". $lastname ."','" . $email . "','" . $username . "','" . $password . "','" . $date . "')";

Вы также должны использовать mysql_real_escape_string на всехэти переменные, чтобы убедиться, что все встроенные кавычки и тому подобное правильно закодированы.

Лучшая версия будет выглядеть примерно так:

$query = sprintf("INSERT INTO accounts (FirstName, LastName, Email, Username, Password, LastLoginDate) VALUES ('%s', '%s', '%s', '%s', '%s', '%s')",
    mysql_real_escape_string($firstname),
    mysql_real_escape_string($lastname),
    mysql_real_escape_string($email),
    mysql_real_escape_string($username),
    mysql_real_escape_string($password),
    mysql_real_escape_string($date));

Вы также должны слушать BoltClock и использовать PDO и заполнители, так что вам не нужно беспокоиться о ваших цитатах и ​​избегать так много.PDO также облегчит переключение баз данных.

4 голосов
/ 09 мая 2011

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

$query = "INSERT INTO accounts (FirstName, LastName, Email, Username, Password, LastLoginDate) VALUES ('$firstname', '$lastname', '$email','$username','$password', '$date')";
0 голосов
/ 09 мая 2011

После того, как вы экранировали свои переменные, как предложили другие, вам нужно заключить их в кавычки, если они являются строковыми переменными:

mysql_select_db('dbname'); 
$query = "INSERT INTO accounts 
       (FirstName, LastName, Email, Username, Password, LastLoginDate) 
       VALUES ('". $firstname . "','". $lastname ."','" . $email . "','" .
       $username . "','" . $password . "','" . $date . "')"; 
$result = mysql_query($query) or die(mysql_error());
echo 'Success'; mysql_close($result); 

В этом случае я добавил одинарные кавычки. у вас не должно быть ошибок сейчас

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...