哪种协议会更少"昂贵"?

时间:2013-11-14 19:45:54

标签: php mysql

我正在添加一些服务器端表单验证(使用php),以防我的网站的一个用户关闭了javascript。在一种形式上,有10个可以更改的单独输入字段。有人可以告诉我哪个协议将使用较少的系统资源?在第一个中,我编写了一些mySQL变量来检查用户的当前设置,并将它们与发布的设置进行比较。如果所有10个发布的值都与当前值相同,请不要UPDATE数据库,否则更新数据库:

$login_id = $_SESSION['login_id'];

$sql1 = mysql_fetch_assoc(mysql_query("SELECT value1 FROM login WHERE login_id = 
'$login_id'"));
$sql1a = $sql1['value1'];
// Eight More, then
$sql10 = mysql_fetch_assoc(mysql_query("SELECT value10 FROM login WHERE login_id = 
'$login_id'"));
$sql10a = $sql10['value10'];
$Value1 = $_POST['Value1'];
// Eight More, then
$Value10 = $_POST['Value10'];

//Other validations then the following

if (($sql1a == $Value1)&&($sql2a == $Value2)&&.......($sql10a == $Value10)) {
echo "<script>
alert ('You haven't made any changes to your profile');
location = 'currentpage.php';
</script>";
}
else {
$sqlUpdate = mysql_query("UPDATE login SET value1 = '$Value1',....value10 = '$Value10'     
WHERE login_id = '$login_id'");
echo "<script>
alert ('Your profile has been updated!');
location = 'currentpage.php';
</script>"; 
}//End php

OR只是使用用户发布的值(保留$ _POST变量)并避免使用比较行进行检查:[($ sql1a == $ Value1)&amp;&amp;($ sql2a == $ Value2)&amp;&amp; .......($ sql10a == $ Value10))并且直接进入

//Other validations then the following

$sqlUpdate = mysql_query("UPDATE login SET value1 = '$Value1',....value10 = '$Value10'     
WHERE login_id = '$login_id'");
echo "<script>
alert ('Your profile has been updated!');
location = 'currentpage.php';
</script>"; 

感谢您的任何意见!

1 个答案:

答案 0 :(得分:2)

如果我理解正确,那么您的问题是性能是否可以检查配置文件是否有修改。对我来说,在我检查了你的代码之后,这不仅仅是表现......

  • 让我们从性能开始: AFAIK MySQL查询比基本的PHP比较慢,这是真的 - 但在这个规模上,我真的认为它不重要。我们讨论的是两个非常基本的查询,它们无法处理大量数据。
  • 让我们考虑一下最终用户会看到什么(UX):,在第二种情况下,用户将无法获得最准确的反馈,告诉他/她没有进行任何修改。在配置文件修改屏幕上,我想这可能不是故意的,所以我会告诉我们没有修改任何东西。 (另外,执行不必要的UPDATE查询并不是最优雅的。)
  • @aehiilrs是对的,请注意那个评论。 这种MySQL使用方式对安全性特别不利 - 如果继续这样做,你将在PHP代码中创建许多安全漏洞。这些很容易被发现和利用,所以请,如上所述从PDO开始,对备选方案有一个很好的了解。任何好的PHP书都会告诉你。您还可以在StackOverflow上查看一个很棒的Q / A:How can I prevent SQL injection in PHP?
  • 我想知道尝试像你一样更新用户界面是否是一个好主意 - 我更希望在输出中加载另一个PHP 而不用任何<script>魔法。在结果PHP中,您始终可以显示类似于CSS样式的状态栏,以显示类似的信息。