我对一段代码有一个小问题,我尝试了各种各样的东西,但它不想工作。
function escape_str($str, $like = FALSE)
{
if (is_array($str))
{
foreach ($str as $key => $val)
{
$str[$key] = $this->escape_str($val, $like);
}
return $str;
}
if (function_exists('mysqli_real_escape_string') AND is_object($this->conn_id))
{
$str = mysqli_real_escape_string($str, $this->conn_id);
}
elseif (function_exists('mysql_escape_string'))
{
$str = mysql_escape_string($str);
}
else
{
$str = addslashes($str);
}
// escape LIKE condition wildcards
if ($like === TRUE)
{
$str = str_replace(array('%', '_'), array('\\%', '\\_'), $str);
}
return $str;
}
它不断返回错误; mysql_real_escape_string()期望参数2是资源,给定对象 我已经尽力了
答案 0 :(得分:0)
代码存在多个问题,首先检查函数是否存在,然后调用另一个函数。
其次,查看mysqli_real_escape_string()
的文档似乎需要$this->conn
作为第一个参数,而string to escape
作为第二个参数。
<?php
if (function_exists('mysqli_real_escape_string') AND is_object($this->conn_id)){
# ------------------------^
$str = mysql_real_escape_string($this->conn_id, $str);
# ---------^^ ?
}
?>
看来fusion3k有两次打败了我,对不起但是我错过了评论。无论如何,将代码重新组织成一个小问题,这是最终结果。
<?php
function escape_str($str, $like = FALSE){
if(is_array($str)){
foreach ($str as $key => $val){
$str[$key] = $this->escape_str($val, $like);
}
return $str;
} else {
if($like){
$str = str_replace(array('%', '_'), array('\\%', '\\_'), $str);
}
if(function_exists('mysqli_real_escape_string') && isset($this->conn_id)){
return mysqli_real_escape_string($str, $this->conn_id);
} elseif(function_exists('mysql_escape_string')){
return mysql_escape_string($str);
} else {
return addslashes($str);
}
}
}
?>