INSERT INTO не будет работать! - PullRequest
0 голосов
/ 03 августа 2009

У меня возникли проблемы с этим кодом:

if (count($_POST)) {

$username = mysql_real_escape_string($_POST['username']);
$passwd = mysql_real_escape_string($_POST['passwd']);

mysql_query("INSERT INTO users (username, password)
             VALUES ($username, $passwd)");

}

<form method="post">

<p><input type="text" name="username" /></p>
<p><input type="password" name="passwd" /></p>

<p><input type="submit" value="Register me!" /></p>

</form>

Я подключен к БД
идентификатор столбца пользователя - auto_increment

Я получаю это при добавлении или смерти mysql_error в выражении sql: в синтаксисе SQL есть ошибка; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с ')' в строке 2

Ответы [ 7 ]

14 голосов
/ 03 августа 2009

Вам не хватает кавычек вокруг вставленных значений:

mysql_query("INSERT INTO users (username, password)
             VALUES ('$username', '$passwd')");
2 голосов
/ 03 августа 2009

Попробуйте поставить 'отметки вокруг переменных во вставке:

mysql_query("INSERT INTO users (username, password)
             VALUES ('$username', '$passwd')");
2 голосов
/ 03 августа 2009

Сообщение об ошибке говорит вам, что у вас есть синтаксическая ошибка в вашем SQL в строке 2. Итак, что-то с кодом

VALUES ($username, $passwd)

неправильно. В частности, вам необходимо заключить символы в кавычки вокруг параметров:

VALUES ('$username', '$passwd')
2 голосов
/ 03 августа 2009

заключить в одинарные кавычки

mysql_query("INSERT INTO users (username, password)
         VALUES ('$username', '$passwd')");
1 голос
/ 03 августа 2009

Более безопасный способ сделать это - использовать подготовленное утверждение. Примерно так:

$statement = $db_connection->prepare("INSERT INTO users (username, password) VALUES (?, ?)");
$statement->bind_param("s", $username);
$statement->bind_param("s", $passwd);
$statement->execute();

Я использовал следующую веб-страницу, чтобы получить этот фрагмент: http://www.petefreitag.com/item/356.cfm, и он содержит больше информации об использовании метода bind_param (Этот пример также для php5). Концепция использования подготовленных операторов не ограничивается php и широко используется во многих языках как для оптимизации производительности, так и для обеспечения безопасности.

1 голос
/ 03 августа 2009

Другие дали вам правильный ответ.

Может быть, здесь вы можете добавить другую переменную, чтобы в следующий раз увидеть проблему. И, в следующий раз, не забудьте протестировать ваш запрос в интерфейсе для MySQL (MySQL Query Browser, PHPMyAdmin или около того ...)

$sql = "INSERT INTO users (username, password)
             VALUES ($username, $passwd)";

if(mysql_query($sql) === false)
{
    echo 'Error with my query : '.$sql;
    echo mysql_error();
}
1 голос
/ 03 августа 2009

какой тип полей логин и пароль? струны? обернуть с "

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