MySQL код ошибки 0 в PHP? Невозможно вставить данные в базу данных с переполнением стека

Поэтому я пытаюсь вставить некоторые данные со страницы PHP в мою базу данных SQL. Эта страница доступна ТОЛЬКО через меня, так что я не беспокоюсь о том, что к ней обращаются или SQL-инъекции и т. Д. Моя проблема не имеет значения, какой код я использую, он не попадает в базу данных. Я сам пытался его кодировать, использовать коды шаблонов, брать с php.net и т.д., ничего не получалось!

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

Код будет указан ниже, и я отредактирую некоторые из моих данных по соображениям конфиденциальности.

<?php
require connect.php

// If the values are posted, insert them into the database.
if (isset($_POST['username']) && isset($_POST['password'])){
$username = $_POST['username'];
$isadminB = $_POST['isadmin'];
$password = $_POST['password'];

$query = "INSERT INTO `users` (user_name, password, isadmin) VALUES ('$username', '$password', '$isadminB')";
$result = mysql_query($query);
if($result){
$msg = "User Created Successfully.";
}
}
$link = mysql_connect("localhost", "root", "password");
echo mysql_errno($link) . ": " . mysql_error($link). "\n";

echo mysql_errno($link) . ": " . mysql_error($link). "\n"; был код, который дал мне код ошибки 0?

Как и просили код для формы с моей предыдущей страницы.

<form action="account_create_submit.php" method="post">
Username: <input type="text" name="username" id="username"> <br /><br />
Password: <input type="password" name="password" id="password"> <br /><br />
<span id="isadmin">Is Admin: Yes<input type="radio" name="isadmin" id="1" value="1"> | No<input type="radio" name="isadmin" id="0" value="0"><br /></span>
<span id="submit"><input type="submit" value="Create Account"></span>
</form>

Итак, изменил код формы, поэтому метод теперь POST. Большой! Все данные читаются правильно, хотя это не было моей проблемой, поскольку даже ввод жестких данных для кода, который нужно отправить, не работал, по крайней мере, его будущая проблема уже решена. Новый код ошибки больше не 0, а следующий:

1064: у вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с » user_name ‘,’ password ‘,’ isadmin ‘) VALUES (‘ testZ ‘,’ lol ‘,’ 1 ‘)’ в строке 1

connect.php

    <?php
$connection = mysql_connect('localhost', 'root', 'password');
if (!$connection){
die("Database Connection Failed" . mysql_error());
}
$select_db = mysql_select_db('Default_DB');
if (!$select_db){
die("Database Selection Failed" . mysql_error());
}

-4

Решение

Во-первых, для тех из вас, кто получает неправильное представление о password для имени столбца:

Конечно, это MySQL «ключевое слово», но не «зарезервированное» слово; более конкретно, это функция (см. ссылку). Обратите внимание, что нет (R) рядом с «именем функции (ключевого слова)»: https://dev.mysql.com/doc/refman/5.5/en/keywords.html поэтому это совершенно верно в качестве имени столбца.

Ref: https://dev.mysql.com/doc/refman/5.1/en/encryption-functions.html#function_password

Клещи требуются только в том случае, если они используются, чтобы не допустить их распознавания как «функции», что явно не в случае ОП. Таким образом, получить вашу информацию и факты прямо.

Более конкретно, если таблица называется PASSWORD и без пробелов между именем таблицы и объявлением столбца:

т.е .: INSERT INTO PASSWORD(col_a, col_b, col_c) VALUES ('var_a', 'var_b', 'var_c')

что приведет к синтаксической ошибке, поскольку имя таблицы считается функцией.

Следовательно, правильный синтаксис должен читаться как

INSERT INTO `PASSWORD` (col_a, col_b, col_c) VALUES ('var_a', 'var_b', 'var_c')

(Изменить 🙂 Чтобы ответить на настоящий вопрос; вы используете $connection в вашей связи, но с $link наряду с отсутствующими переменными db, переданными вашему запросу, и кавычками / точкой с запятой, которые я уже обрисовал здесь.

Это если вы хотите, чтобы ваш код работал, но я очень не рекомендую. Вы используете устаревшую библиотеку MySQL и MD5, как вы заявили. Все старые технологии, которые больше не безопасны для использования и не будут поддерживаться в будущих версиях PHP.

Вы пропустили точку с запятой здесь require connect.php и цитаты.

Это следует читать как require "connect.php";

Вы также должны удалить это:

$link = mysql_connect("localhost", "root", "password");
echo mysql_errno($link) . ": " . mysql_error($link). "\n";

вы уже пытаетесь включить файл подключения.

Используйте это в вашем файле подключения: (изменено, с использованием параметра подключения переменной подключения)

$connection = mysql_connect('localhost', 'root', 'password');
if (!$connection){
die("Database Connection Failed" . mysql_error());
}
$select_db = mysql_select_db('Default_DB', $connection);
if (!$select_db){
die("Database Selection Failed" . mysql_error());
}

и передать $connection на ваш запрос в качестве 2-го параметра.

$result = mysql_query($query, $connection);

Добавьте сообщение об ошибке в начало файла (ов) сразу после открытия тега PHP
например <?php error_reporting(E_ALL); ini_set('display_errors', 1); затем остальная часть вашего кода, чтобы увидеть, если он что-нибудь дает.

Также добавьте or die(mysql_error()) в mysql_query(),

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

т.е .:

$username = mysql_real_escape_string($_POST['username'], $connection);

и сделать то же самое для других.

Используйте более безопасный метод: (изначально размещен ответ)

Можно также сделать полную переписать и использовать mysqli_ с подготовленными заявлениями.

Заполните учетные данные для себя.

Sidenote: Возможно, вам придется заменить последний s для i для $isadminB это если этот столбец int,

$link = new mysqli('localhost', 'root', 'password', 'demo');
if ($link->connect_errno) {
throw new Exception($link->connect_error, $link->connect_errno);
}

if (!empty($_POST['username']) && !empty($_POST['password'])){
$username = $_POST['username'];
$isadminB = $_POST['isadmin'];
$password = $_POST['password'];

// now prepare an INSERT statement
if (!$stmt = $link->prepare('INSERT INTO `users`
(`user_name`, `password`, `isadmin`)
VALUES (?, ?, ?)')) {
throw new Exception($link->error, $link->errno);
}

// bind parameters
$stmt->bind_param('sss', $username, $password, $isadminB);

if (!$stmt->execute()) {
throw new Exception($stmt->error, $stmt->errno);
}

}

else{
echo "Nothing is set, or something is empty.";
}

Я заметил, что вы можете хранить пароли в виде простого текста. Если это так, это крайне обескураживает.

Я рекомендую вам использовать CRYPT_BLOWFISH или PHP 5.5 password_hash() функция. Для PHP < 5.5 использовать password_hash() compatibility pack.

Вы также можете использовать этот пример PDO, взятый из одного из ответов ircmaxell:

Просто используйте библиотеку. Шутки в сторону. Они существуют по причине.

  • PHP 5.5+: использовать password_hash()
  • PHP 5.3.7+: использовать password-compat (пакет совместимости для выше)
  • Все остальные: использовать phpass

Не делай этого сам. Если вы создаете свою собственную соль, ТЫ ДЕЛАЕШЬ ЭТО НЕПРАВИЛЬНО. Вы должны использовать библиотеку, которая обрабатывает это для вас.

$dbh = new PDO(...);

$username = $_POST["username"];
$email = $_POST["email"];
$password = $_POST["password"];
$hash = password_hash($password, PASSWORD_DEFAULT);

$stmt = $dbh->prepare("insert into users set username=?, email=?, password=?");
$stmt->execute([$username, $email, $hash]);

И при входе в систему:

$sql = "SELECT * FROM users WHERE username = ?";
$stmt = $dbh->prepare($sql);
$result = $stmt->execute([$_POST['username']]);
$users = $result->fetchAll();
if (isset($users[0]) {
if (password_verify($_POST['password'], $users[0]->password) {
// valid login
} else {
// invalid password
}
} else {
// invalid username
}
4

Другие решения

Вы используете «get» в качестве метода отправки формы. переменные post не будут распознаны.

Также…

Похоже, вам не хватает второго параметра вашей функции mysql_query (), который является идентификатором вашей ссылки на соединение MySQL. Я предполагаю, что вы создали соединение в connection.php.

Как правило, функция mysql_query () будет

$result = mysql_query($query, $conn);

с $ conn, предварительно заданным в вашем файле connection.php.

1

password это специальное слово в MySQL, и может быть необходимо поместить слово в кавычки, такие как `password`,

0

Почему вы помещаете всю информацию из формы в ссылку на отправить? например: account_create_submit.php?username=myusername&password=mypassword&isadmin=0


я могу увидеть это $username = $_POST['username']; не соответствует имени пользователя в строке запроса.

$query = "INSERT INTOпользователи(user_name, password, isadmin) VALUES ('$username', '$password', '$isadminB')";

Пока ты чинишь это, почему бы тебе не сделать $isadminB а также $_POST['isadmin'] тот же самый. использование 'isadminB' в обоих местах.

Проверьте это и посмотрите, что получится!

0
По вопросам рекламы [email protected]