![](/img/trans.png)
[英]Including database connection in mysqli_real_escape_string that is contained in a function
[英]How can I use mysql connection if connection is made in a php class and the function mysqli_real_escape_string is used in a separate functions file?
我正在使用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()不需要連接作為必要的參數。 那么在這種情況下該怎么辦?
您可以通過多種方法來實現:
1.1-嘗試將轉義功能放在函數內的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)在函數內部創建一個connect對象並運行轉義方法
// filter user input data
function filter_data($input)
{
$db = new Connect();
$db->connect();
return $db->_escape($input);
}
1.2.2(子方法2)只需在filter_data外部運行轉義方法,就不再使用此函數
$db = new Connect();
$db->connect();
$filtered = $db->_escape($input);
2.1使用與第一種方法相同的方法,但不要將轉義函數放在connect內部,只需制作一個擴展類(示例dbFilter)並將其放在其中
3.1使用connect函數返回的連接對象
// 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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.