gpt4 book ai didi

php - 最佳选择? MySQL 查询 Action

转载 作者:搜寻专家 更新时间:2023-10-30 21:56:04 25 4
gpt4 key购买 nike

我已经到了必须决定使用哪种方法的地步:

我制作了一个ChangePassword.php 文件,我在其中验证数据然后更改密码。哪个更好?

  • A:更多的查询和更准确的错误处理

  • B:查询较少,但可能在更大范围(大量用户)中更快

A.版本:

// Check for valid session

$qry = $db->prepare('SELECT id FROM userData WHERE id = :userId and session = :session');
$qry->bindParam(':userId', $userId, PDO::PARAM_INT);
$qry->bindParam(':session', $session, PDO::PARAM_STR);
if ($qry->rowCount() <= 0) {

// Invalid session

exit("Invalid Session");
}

// Valid session

// Check for correct password

$qry = $db->prepare('SELECT id FROM userData WHERE id = :userId and password = :passwordHashed');
$qry->bindParam(':userId', $userId, PDO::PARAM_INT);
$qry->bindParam(':passwordHashed', $passwordHashed, PDO::PARAM_STR);
$qry->execute();

if ($qry->rowCount() <= 0) {

// Incorrect password

exit("Incorrect Password");
}

// Update Password

$qry = $db->prepare('UPDATE userData SET password = :newPasswordHashed WHERE id = :userId');
$qry->bindParam(':userId', $userId, PDO::PARAM_INT);
$qry->bindParam(':passwordHashed', $passwordHashed, PDO::PARAM_STR);
$qry->bindParam(':newPasswordHashed', $newPasswordHashed, PDO::PARAM_STR);
$qry->execute();

if ($qry->rowCount() > 0) {

// Successful edit

exit("SUCCESS!");
} else {

// Unsuccessful edit

exit("Uknown Error...");
}

B.版本:

// Check for valid session, correct password and update password too

$qry = $db->prepare('UPDATE userData SET password = :newPasswordHashed WHERE id = :userId AND session = :session AND password = :passwordHashed');
$qry->bindParam(':userId', $userId, PDO::PARAM_INT);
$qry->bindParam(':session', $session, PDO::PARAM_STR);
$qry->bindParam(':passwordHashed', $passwordHashed, PDO::PARAM_STR);
$qry->bindParam(':newPasswordHashed', $newPasswordHashed, PDO::PARAM_STR);
$qry->execute();

if ($qry->rowCount() > 0) {

// Successful edit

exit("SUCCESS!");
} else {

// Unsuccessful edit

exit("Maybe invalid session, or wrong password, or unknown error? Decide! :D");
}

你怎么看?

解决方案 A 对我来说更重要,因为我想将错误通知用户,但我也很好奇它是否会因大量查询而减慢数据库速度..

最佳答案

我不太担心您的 ChangePassword.php 页面运行的查询数量。用户每秒将提交此表单多少次?与您的主页等更常见的页面相比,它看起来不像是 1000 次使用 1 次的页面。

换句话说,最仔细地优化将被频繁请求的页面。不要过分关注很少请求的页面的精细优化。

我还要说的是,如果验证 session 的性能对于应用的可扩展性很重要,那么您就不会将 session 存储在持久性数据库中,而是将其存储在 Memcached 或 Redis 等缓存中。

我什至可以进一步说,如果您的站点有如此多的用户流量,以至于每秒多次请求“ChangePassword”页面并且需要高度可扩展,那么您将使用不同的后端语言,例如 Java 或去吧,不是 PHP。

关于php - 最佳选择? MySQL 查询 Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48968027/

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