Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/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和MySQLi正确地转义和还原字符串_Php_Mysqli_Escaping - Fatal编程技术网

如何使用PHP和MySQLi正确地转义和还原字符串

如何使用PHP和MySQLi正确地转义和还原字符串,php,mysqli,escaping,Php,Mysqli,Escaping,也许我在这里遗漏了一些要点。我一直以为,那个序列 mysqli -> real_escape_string($var); insert into database ..... select from database $var = stripslashes 是存储和检索用户字符串输入的正确方法。我刚刚发现,除了一种情况外,这种方法工作得很好——它去除了用户输入的所有斜杠。只有当我使用 $var = str_replace("\\","\\\\",$var); 在真正的逃逸字符串之前。假

也许我在这里遗漏了一些要点。我一直以为,那个序列

mysqli -> real_escape_string($var);
insert into database
.....
select from database
$var = stripslashes
是存储和检索用户字符串输入的正确方法。我刚刚发现,除了一种情况外,这种方法工作得很好——它去除了用户输入的所有斜杠。只有当我使用

$var = str_replace("\\","\\\\",$var);

在真正的逃逸字符串之前。假设出于某种原因我不能使用预先准备好的语句,这种方法正确吗?

这里的答案是以非常严格的方式使用带有占位符值的预先准备好的语句。任何和所有用户数据,无论是直接来自表单输入、查询参数、会话数据还是其他数据库记录,都必须视为可能的恶意数据,因此需要转义。在处理数据库时,最可靠的方法是使用占位符值,在查询和数据之间保持严格的分隔

例如:

INSERT INTO users (name, shoes) VALUES (?, ?)
其中,那些
值表示任意用户数据。使用
bind_param
可以针对以下内容进行绑定:

$stmt->bind_param('si', $_POST['name'], $_POST['shoes']);
其中,它分别正确地将其编码为字符串和整数

在显示内容时,您需要意识到,对于呈现内容的上下文,无论是HTML、JavaScript/JSON还是URI,都必须避免这种情况,因为它们都有不同的要求和格式


始终以最中性的格式存储数据。切勿任意转义HTML或带字符。非破坏性清理(如修剪前导和尾随空格)是可以的,但不鼓励任何与标准化到理想形式无关的激进格式。

使用预先准备好的语句,忘记转义字符串。不要,不要,只是不要使用
条带斜杠。该函数旨在处理“magic quotes”带来的损害,但为了改善所有功能,该功能已从PHP中删除。“如果出于某种原因我无法使用准备好的语句,那么这是否完全正确?”-为什么不?
real\u escape\u string()
不会删除斜杠。他们逃避了。一定是其他原因造成的。可能是
$\u POST['shoes']
的重复,应该读作
$\u POST['shoe\u size']
——这个名字意味着穿了一双古驰鞋;-)@FunkFortyNiner这只是计算你有多少双鞋。鞋子的尺寸不是纯粹的数字。谢谢你提供的详细信息,但问题清楚地表明:“我不能使用事先准备好的声明”-这是有充分理由的。@FunkFortyner的人在去年异常暴躁,我不知道为什么。@user3523426除非你能明确说明原因,否则我不能评论你应该做什么。这东西非常严重。除了准备好的陈述,没有安全的方法,所以你必须更详细地解释你遇到了什么障碍。