将数据插入数据库无效 (PHP-SQL)
Insert data to database not working (PHP-SQL)
我的 PHP 代码中的插入数据 sql 命令不起作用。有人可以帮忙吗?
我有一个注册表单,它从输入字段(姓名、姓氏、电子邮件、用户名和密码)中获取值
用户在此字段中输入的值应保存到我的 table "users" 列中(ID [这是主键/INT]、名称 [TEXT]、姓氏[ TEXT]、电子邮件 [VARCHAR]、用户名 [VARCHAR] 和密码 [VARCHAR]) .
这是我当前的代码:
if (isset ($_POST['name'],$_POST['lastname'],$_POST['email'],$_POST['username'], $_POST['password']))
{
//connect to database
$conn = mysqli_connect ('localhost', 'root', '', 'test_database');
if ($conn)
{
$sql="SELECT username FROM users WHERE username = '" . $_POST['username'] . "';";
$query = mysqli_query ($conn, $sql);
$result = mysqli_fetch_array ($query);
if ($result ['username'])
{
header ('Location: ' . $_SERVER['PHP_SELF'] . '?errno=1');
}
else
{
$sql="INSERT INTO users (ID, name, lastname, e-mail, username, password) VALUES (' ','" .$_POST['name'] . "' ,'" . $_POST['lastname']. "' ,'" . $_POST['email']. "' ,'" . $_POST['username']. "' ,'" . $_POST['password']. "');";
mysqli_query ($conn, $sql);
mysqli_close ($conn);
//registration completed, redirect to index page
//header ('Location:index.php?reg=1');
}
}
else
{
echo 'connection error';
}
}
除了 space VALUES (' ',
和 ID
列等的评论中已经概述的内容外,您的电子邮件列名称包含连字符并被解释为 e
MINUS mail
并作为数学运算。
将其重命名为 e_mail
或在其周围打勾。
`e-mail`
阅读以下有关标识符限定符的内容:
在查询中使用 mysqli_error($conn)
会引发语法错误。
旁注:出于多种原因,您应该转义数据,其中之一是为了防止 SQL 注入,如果您的数据可能包含 MySQL 可能会抱怨的字符,例如 John's Bar & Grill
为例。
您当前的密码对SQL injection. Use prepared statements, or PDO with prepared statements开放。
密码
我还注意到您可能以明文形式存储密码。不推荐这样做。
使用以下之一:
- CRYPT_BLOWFISH
crypt()
bcrypt()
scrypt()
- On OPENWALL
- PBKDF2
- PBKDF2 on PHP.net
- PHP 5.5 的
password_hash()
函数。
- 兼容包(如果PHP < 5.5)https://github.com/ircmaxell/password_compat/
其他链接:
关于列长度的重要旁注:
如果您决定使用 password_hash()
或 crypt,请务必注意,如果您当前密码列的长度低于 60,则需要将其更改为该长度(或更高) ).手册建议长度为255。
您需要更改列的长度并使用新的散列重新开始才能生效。否则,MySQL 将无提示地失败。
您使用“ ”插入 ID。 ID 应该是自动递增且唯一的。您不能将白色 space 插入所有。
尝试从插入到查询中删除 id。将您的查询变成这样
$sql="INSERT INTO users (name, lastname, e-mail, username, password) VALUES ('" .$_POST['name'] . "' ,'" . $_POST['lastname']. "' ,'" . $_POST['email']. "' ,'" . $_POST['username']. "' ,'" . $_POST['password']. "');";
我的 PHP 代码中的插入数据 sql 命令不起作用。有人可以帮忙吗?
我有一个注册表单,它从输入字段(姓名、姓氏、电子邮件、用户名和密码)中获取值
用户在此字段中输入的值应保存到我的 table "users" 列中(ID [这是主键/INT]、名称 [TEXT]、姓氏[ TEXT]、电子邮件 [VARCHAR]、用户名 [VARCHAR] 和密码 [VARCHAR]) .
这是我当前的代码:
if (isset ($_POST['name'],$_POST['lastname'],$_POST['email'],$_POST['username'], $_POST['password']))
{
//connect to database
$conn = mysqli_connect ('localhost', 'root', '', 'test_database');
if ($conn)
{
$sql="SELECT username FROM users WHERE username = '" . $_POST['username'] . "';";
$query = mysqli_query ($conn, $sql);
$result = mysqli_fetch_array ($query);
if ($result ['username'])
{
header ('Location: ' . $_SERVER['PHP_SELF'] . '?errno=1');
}
else
{
$sql="INSERT INTO users (ID, name, lastname, e-mail, username, password) VALUES (' ','" .$_POST['name'] . "' ,'" . $_POST['lastname']. "' ,'" . $_POST['email']. "' ,'" . $_POST['username']. "' ,'" . $_POST['password']. "');";
mysqli_query ($conn, $sql);
mysqli_close ($conn);
//registration completed, redirect to index page
//header ('Location:index.php?reg=1');
}
}
else
{
echo 'connection error';
}
}
除了 space VALUES (' ',
和 ID
列等的评论中已经概述的内容外,您的电子邮件列名称包含连字符并被解释为 e
MINUS mail
并作为数学运算。
将其重命名为 e_mail
或在其周围打勾。
`e-mail`
阅读以下有关标识符限定符的内容:
在查询中使用 mysqli_error($conn)
会引发语法错误。
旁注:出于多种原因,您应该转义数据,其中之一是为了防止 SQL 注入,如果您的数据可能包含 MySQL 可能会抱怨的字符,例如 John's Bar & Grill
为例。
您当前的密码对SQL injection. Use prepared statements, or PDO with prepared statements开放。
密码
我还注意到您可能以明文形式存储密码。不推荐这样做。
使用以下之一:
- CRYPT_BLOWFISH
crypt()
bcrypt()
scrypt()
- On OPENWALL
- PBKDF2
- PBKDF2 on PHP.net
- PHP 5.5 的
password_hash()
函数。 - 兼容包(如果PHP < 5.5)https://github.com/ircmaxell/password_compat/
其他链接:
关于列长度的重要旁注:
如果您决定使用 password_hash()
或 crypt,请务必注意,如果您当前密码列的长度低于 60,则需要将其更改为该长度(或更高) ).手册建议长度为255。
您需要更改列的长度并使用新的散列重新开始才能生效。否则,MySQL 将无提示地失败。
您使用“ ”插入 ID。 ID 应该是自动递增且唯一的。您不能将白色 space 插入所有。 尝试从插入到查询中删除 id。将您的查询变成这样
$sql="INSERT INTO users (name, lastname, e-mail, username, password) VALUES ('" .$_POST['name'] . "' ,'" . $_POST['lastname']. "' ,'" . $_POST['email']. "' ,'" . $_POST['username']. "' ,'" . $_POST['password']. "');";