Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.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_real_escape_string()需要两个参数?_Php_Mysqli_Php 5.3 - Fatal编程技术网

Php 为什么mysqli_real_escape_string()需要两个参数?

Php 为什么mysqli_real_escape_string()需要两个参数?,php,mysqli,php-5.3,Php,Mysqli,Php 5.3,有人能给我解释一下吗 让我们看一下这个脚本 <?php $con=mysqli_connect("localhost","my_user","my_password","my_db"); // Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } // escape variables for security $

有人能给我解释一下吗

让我们看一下这个脚本

<?php
$con=mysqli_connect("localhost","my_user","my_password","my_db");

// Check connection
if (mysqli_connect_errno()) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

// escape variables for security

$firstname = mysqli_real_escape_string($con, $_POST['firstname']);
$lastname = mysqli_real_escape_string($con, $_POST['lastname']);
$age = mysqli_real_escape_string($con, $_POST['age']);

$sql="INSERT INTO Persons (FirstName, LastName, Age)
VALUES ('$firstname', '$lastname', '$age')";

if (!mysqli_query($con,$sql)) {
  die('Error: ' . mysqli_error($con));
}
echo "1 record added";

mysqli_close($con);
?>

因为
mysqli\u real\u escape\u string()
需要知道要将数据放入的数据库的字符编码

它不会自动假定一个特定的连接,因为如果您连接到多个数据库,您不希望它猜出您指的是哪一个

如果它已经在上面的脚本中,为什么还需要连接呢

函数不知道您想要哪个连接,您需要显式地传递它。如果打开多个数据库的多个连接,则必须显式传递一个连接。隐式传递最后一个连接在ext/mysql中是一种不好的做法,对于任何典型的软件开发来说都是不明智的


现在,为什么它需要一个连接呢?因为它需要知道连接编码。发出查询时,您正在向数据库发送一个简单的字节数据流。数据库以set连接编码解释这个字节流,将其转换为它可以读取的字符,以了解您想要从中获得什么。同一个字符在不同编码中的编码可能完全不同。因此,转义函数需要知道需要处理什么字符编码才能正确转义字符。如果操作不当,可能会利用SQL注入漏洞进行攻击。

来自文档“考虑连接的当前字符集”。转义在字符集之间是不同的,或者可以是不同的。一个原因是转义更安全