Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 以下哪种方式更好_Php_Performance - Fatal编程技术网

Php 以下哪种方式更好

Php 以下哪种方式更好,php,performance,Php,Performance,这就是我目前掌握的密码。在我看来,这个代码基本上是。。。好啊您认为我可以安全地拆下内部饰件()。请尽量不要给我一个无休止的垃圾邮件版本,我想尝试学习如何做得更好 更新 因此,在阅读了一些回复之后,我想我已经了解了一种从用户那里安全获取数据、存储数据然后再显示数据的好方法 当您第一次加载页面时 if(get_magic_quotes_gpc()) { $location_name = trim(mysql_real_escape_string(trim(stripslashes($_GET['

这就是我目前掌握的密码。在我看来,这个代码基本上是。。。好啊您认为我可以安全地拆下内部
饰件()
。请尽量不要给我一个无休止的垃圾邮件版本,我想尝试学习如何做得更好

更新

因此,在阅读了一些回复之后,我想我已经了解了一种从用户那里安全获取数据、存储数据然后再显示数据的好方法

当您第一次加载页面时

if(get_magic_quotes_gpc())
{
  $location_name = trim(mysql_real_escape_string(trim(stripslashes($_GET['location_name']))));
}
else
{
  $location_name = trim(mysql_real_escape_string(trim($_GET['location_name'])));
}
然后,当您将此变量用作SQL字符串的一部分时,即使不将数据存储在数据库中,也应该将其转义

$foo = trim($_GET['foo']);
if(get_magic_quotes_gpc())
{
  $foo = stripslashes($foo);
}
最后,如果从数据库中读取数据并希望将其显示为HTML,例如博客或论坛上的帖子,则应使用
htmlspecialchars

 mysql_real_escape_string($foo);
有人想建议使用一组更好的函数吗?另外,显然要包装这些函数,使其更易于调用。

此处:

echo(htmlspecialchars($bar));
还有SQL注入保护,但在将此变量粘贴到SQL查询中之前的最后一刻不要这样做。即使这样,也不要将更改应用于var本身,而是一个副本。您可能希望在之后向用户显示$location\u name(例如,如果表单失败)。所以

当然,我假设$location\u name最终会出现在数据库中;否则您不需要mysql\u real\u escape\u字符串

最后,如果要在页面的某个位置显示$location\u name,则需要使用htmlspecialchars

编辑:您希望在显示数据之前使用htmlspecialchars()(绝对不要在数据库中保存已经通过htmlspecialchars转换的数据)。通常,您希望在最后一刻使用转义函数,然后在var的副本上使用转义函数。这样您就知道,在脚本编写过程中的任何时候,var都是原始的,并且没有携带以前某个地方发生的转换中的一些随机转义字符

您还知道转义函数的位置/应该位置。sql转义在sql查询附近/处。XSS转义(htmlspecialchars)位于网页中显示数据的部分附近


最后,一旦掌握了一些东西,就可以通过使用PHP的PDO函数放弃SQL转义。将来你可能还想看看这个:

很抱歉,你的问题都错了

首先,无论如何,它与性能无关。这些功能不会成为瓶颈,也不会导致任何性能问题

接下来,你选择了一个错误的地方来摆脱魔法引号。Magic quotes与输入数据相关,与数据库无关。最好是创建一个独特的函数,并将其放在配置文件中,包含在每个脚本中。你可以从中选择一个

因此,代码如下所示:

$sql="UPDATE whatever(location) VALUES('" . mysql_real_escape_string($location_name) . "')"

但我强烈建议您不要将数据库转义与任何其他内容混为一谈,因为任何其他内容都是可选的,而数据库转义是严格且无条件的

我认为您可以安全地拆下外部
饰件()
。我认为
mysql\u real\u escape\u string
不会添加任何不必要的空格。稍微更正一下。不是“当您将此变量用作SQL字符串的一部分时”,而是任何变量。只有当你用引号括起来的时候。但当然,正如马诺斯所提到的,一旦你转向准备好的陈述,所有这些规则都会过时。剩下的就完美了。这是使用转义字符串的直接响应的一个很好的观点
htmlspecialchars()
您是在存储数据时还是在显示数据时使用它?这两点都很好@正在展示的车夫。否则,在第二次编辑后,您的数据将被破坏。
$sql="UPDATE whatever(location) VALUES('" . mysql_real_escape_string($location_name) . "')"
$location_name = mysql_real_escape_string(trim($_GET['location_name']));