我正在开发一个我正在使用mysqli扩展的项目。我在一个名为Connect.class.php的PHP类中建立了mysql连接,如下所示 -
// connect to db
public function connect()
{
$this->con = @mysqli_connect($this->db_host, $this->db_username, $this->db_password, $this->db_name) or die("Couldn't connect! " . mysqli_connect_error());
return $this->con;
}
我还有另一个名为functions.php的文件,我在这个文件中清理输入数据 -
// filter user input data
function filter_data($input)
{
$sanitized_data = mysqli_real_escape_string(connection, htmlspecialchars(trim($input), ENT_QUOTES, "UTF-8"));
return $sanitized_data;
}
现在上面的代码无法正常工作,因为它没有正确的连接参数。我不明白如何从我的PHP类Connect.class.php提供正确的连接。由于对象的属性不能用于单独文件的功能,即我不能使用$ this-> con。
如果我使用简单的mysql代替mysqli那么完全没有问题,因为mysql_real_escape_string()不需要连接作为必要的参数。那么在这种情况下该怎么办?
答案 0 :(得分:0)
你可以通过多种方式实现:
1.1-尝试将escape函数放在函数内的connect类中。
//Make a function _escape($str) and put mysqli_real_escape_string($this->con,$str) in it
//Connect.class.php
public function _escape($str){
return mysqli_real_escape_string($this->con, htmlspecialchars(trim($input), ENT_QUOTES, "UTF-8"));
}
1.2.1(子方法1)在函数内部创建连接对象并运行转义方法
// filter user input data
function filter_data($input)
{
$db = new Connect();
$db->connect();
return $db->_escape($input);
}
1.2.2(子方法2)只需在filter_data外部运行escape方法,不要再使用此函数
$db = new Connect();
$db->connect();
$filtered = $db->_escape($input);
2.1使用与其中一个相同的方法,但不要将escape函数放在connect中,只需创建一个扩展类(示例dbFilter)并将其放在那里
3.1使用连接对象返回连接功能
// altered filter user input data
function filter_data($input, $conn)
{
$sanitized_data = mysqli_real_escape_string($conn, htmlspecialchars(trim($input), ENT_QUOTES, "UTF-8"));
return $sanitized_data;
}
//call it
$db = new Connect();
$conn = $db->connect();
filter_data($input, $conn);