gpt4 book ai didi

php - PHP 更新数据库时遇到问题

转载 作者:行者123 更新时间:2023-11-29 03:50:32 24 4
gpt4 key购买 nike

我已经使用

连接到数据库
function db_connect() {
$result = new mysqli('localhost','root', '******', 'DB');
if (!$result) {
throw new Exception('Could not connect to database server');
} else {
return $result;
}
}

但是当我去注册一个新客户时,我得到“无法注册到数据库”,那段代码是

$result = mysqli_query($conn, "insert into user values('".$username."', sha1('".$password."'), '".$email."')");
if (!$result) {
throw new Exception('Could not register to DB.');
}

我的数据库中有一个用户表。 user 表中的值是:

username varchar(100),
email varchar(150),
passwd varchar(17)

最佳答案

当您有一个没有列的 INSERT 语句时,列的顺序将与表架构相匹配。

基于此,让我们重新检查您的代码段:

$result = mysqli_query($conn, "insert into user values('".$username."', sha1('".$password."'), '".$email."')");
if (!$result) {
throw new Exception('Could not register to DB.');
}

据此,您要插入用户名,然后是密码,然后是电子邮件。但是,您的表架构首先定义用户名,然后是电子邮件,然后是密码。

基于此,让我们改用以下代码段。请注意,这利用了准备好的语句,可以防止 SQL 注入(inject)攻击。

$query = "INSERT INTO user (username, passwd, email) VALUES (?,?,?)";

if ($stmt = mysqli_prepare($conn, $query)) {

/* bind parameters for markers */
mysqli_stmt_bind_param($stmt, "sss", $username, sha1($password), $email);

/* execute query */
mysqli_stmt_execute($stmt);

/* close statement */
mysqli_stmt_close($stmt);
}

另一个问题:数据库中的密码字段太短(17 个字符)。一个 SHA-128 哈希密码恰好是 40 个字符,要使用 password_* 方法,您至少需要 60 个字符。我建议简单地将密码字段设置为 255 个字符。

请同时保留Jay Blanchard's comment请记住使用 password_* 系列函数。而不是使用 SHA1 散列密码。

关于php - PHP 更新数据库时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37684772/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com