gpt4 book ai didi

php - 选择查询检查表单数据是否已存在于数据库 MySQL/PHP 中的小问题

转载 作者:行者123 更新时间:2023-11-29 10:43:21 24 4
gpt4 key购买 nike

我正在创建一个注册页面,在将数据插入数据库之前,我需要检查它是否已经存在,但我生成的 SQL 请求末尾缺少一个 '。

SELECT * from users where firstname = 'Bob' and lastname = 'Smith' and 
username = 'bobsmith' and email = 'bob@test.co.uk' and password = 'testing1

密码后不显示'。

这是我的 PHP 代码:

$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];
$username = $_POST['username'];
$email = $_POST['email'];
$password = $_POST['password'];

$query1 = "SELECT * from users where firstname = '" .
$firstname .
"' and lastname = '" .
$lastname .
"' and username = '" .
$username .
"' and email = '" .
$email .
"' and password = '" . $password;

echo "<BR>Running query ... <BR>" . $query1;
$result1 = mysqli_query($cxn,$query1);
$numrows1 = mysqli_affected_rows($cxn);

我尝试在密码末尾添加引号,例如 。 $密码。 '"; 但是,这会使下面的其余代码变灰,因此它无法工作。我该如何解决这个问题?

更新:我知道这不是最安全的方法,但它适用于大学作业,这就是我们应该这样做的方法。

最佳答案

这是使用 MySQLi 准备好的语句执行查询的一种方法:

$username = $_POST['username'];
$password = $_POST['password'];

$cxn= mysqli_connect($host, $user, $password, $database);

/* check connection */
if (!$cxn) {
echo mysqli_connect_error();
exit();
}

/* prepare the query */
$stmt = mysqli_prepare($cxn, "SELECT * FROM users WHERE username = ?"); // assuming username is unique
$stmt->bind_param('s', $username);

/* execute prepared statement */
$result = $stmt->execute();
$stmt->store_result();

/* get the user info */
$user = $result->fetch_assoc();

如果您使用PHP 的 built-in functions 为了处理密码安全性,您可以使用password_verify($password, $user['stored_hash'])将存储的密码与$password进行比较。 确保正确设置散列密码的数据库。

如果您使用的 PHP 版本低于 5.5,您可以使用 password_hash() compatibility pack

没有必要escape passwords 或在散列之前对它们使用任何其他清理机制。这样做会更改密码并导致不必要的额外编码。

关于php - 选择查询检查表单数据是否已存在于数据库 MySQL/PHP 中的小问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45062550/

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