尝试解决 mysqli_real_escape_string
Trying to make a work around for the mysqli_real_escape_string
所以目前我的代码是程序格式的,所以为了防止自己在 mysqli_real_escape_string 函数中添加 "link" 我做了一个如下所示的方法:
// Used to create a legal SQL string that you can use in an SQL statement in place of mysqli_real_escape_string
public function escape_string($string) {
$newstring = mysqli_real_escape_string($this->dbconn, $string);
return $newstring;
}
虽然我使用它时没有得到任何结果,但如果您有任何建议,请告诉我。
以下是我使用该函数的一些示例:
function email_exists($email,$dblayer){
$sql = "SELECT `id` FROM `users` WHERE `email` = '" . $dblayer->escape_string($email) . "'";
$results = $dblayer->select_query($sql);
if($results){
return true;
}else{
return false;
}
还有这个:
public function pass_reset($email){
$newpass = substr(md5(mt_rand(1,99999)),0,8);
$newpasshash = md5($newpass . '************');
$sql = "UPDATE `admin_users` SET `password` = '" . $newpasshash . "' WHERE `username` = '" . $this->dblayer->escape_string($email) . "'";
$this->dblayer->modify_query($sql);
return $newpass;
}
这是围绕另一个名为 dbobject 的 dblayer 创建的:
case $range:
$dates = explode(',',$_GET['search-string']);
$sql = "SELECT SQL_CALC_FOUND_ROWS * FROM `user_profile` WHERE `created` BETWEEN '" . $dates[0] . "' AND '" . $dates[1] . "'";
break;
default:
$sql = "SELECT SQL_CALC_FOUND_ROWS * FROM `user_profile` WHERE `" . $_GET['search-field'] . "` LIKE '%" . $dbobject->escape_string($_GET['search-string']) . "%'";
break;
看起来问题可能有两个方面。首先,我希望您的 $this->dbconn
是 NULL
。这可能 mysqli_real_escape_string
return NULL
。这意味着您的 SQL 可能正在寻找空字符串。
验证这一点的最佳方法是检查连接是否 NULL
或检查 SQL 你是 运行。你看到了 ''
个数字吗?然后你要连接 null。
但是,唯一可能发生的情况是,如果您抑制了错误报告。在开发过程中,您应该打开错误。有关于如何显示错误的信息 in this question.
这是我为解决问题而对原始代码所做的不同之处。它可能看起来有点模棱两可。
// Used to create a legal SQL string that you can use in an SQL statement in place of mysqli_real_escape_string
public function escape_string($string) {
$newstring = '';
if ($this->dbconn) {
switch ($this->dbtype) {
case 'mysql' :
$newstring = mysqli_real_escape_string ( $this->dbconn, $string );
break;
}
}
return $newstring;
}
所以目前我的代码是程序格式的,所以为了防止自己在 mysqli_real_escape_string 函数中添加 "link" 我做了一个如下所示的方法:
// Used to create a legal SQL string that you can use in an SQL statement in place of mysqli_real_escape_string
public function escape_string($string) {
$newstring = mysqli_real_escape_string($this->dbconn, $string);
return $newstring;
}
虽然我使用它时没有得到任何结果,但如果您有任何建议,请告诉我。
以下是我使用该函数的一些示例:
function email_exists($email,$dblayer){
$sql = "SELECT `id` FROM `users` WHERE `email` = '" . $dblayer->escape_string($email) . "'";
$results = $dblayer->select_query($sql);
if($results){
return true;
}else{
return false;
}
还有这个:
public function pass_reset($email){
$newpass = substr(md5(mt_rand(1,99999)),0,8);
$newpasshash = md5($newpass . '************');
$sql = "UPDATE `admin_users` SET `password` = '" . $newpasshash . "' WHERE `username` = '" . $this->dblayer->escape_string($email) . "'";
$this->dblayer->modify_query($sql);
return $newpass;
}
这是围绕另一个名为 dbobject 的 dblayer 创建的:
case $range:
$dates = explode(',',$_GET['search-string']);
$sql = "SELECT SQL_CALC_FOUND_ROWS * FROM `user_profile` WHERE `created` BETWEEN '" . $dates[0] . "' AND '" . $dates[1] . "'";
break;
default:
$sql = "SELECT SQL_CALC_FOUND_ROWS * FROM `user_profile` WHERE `" . $_GET['search-field'] . "` LIKE '%" . $dbobject->escape_string($_GET['search-string']) . "%'";
break;
看起来问题可能有两个方面。首先,我希望您的 $this->dbconn
是 NULL
。这可能 mysqli_real_escape_string
return NULL
。这意味着您的 SQL 可能正在寻找空字符串。
验证这一点的最佳方法是检查连接是否 NULL
或检查 SQL 你是 运行。你看到了 ''
个数字吗?然后你要连接 null。
但是,唯一可能发生的情况是,如果您抑制了错误报告。在开发过程中,您应该打开错误。有关于如何显示错误的信息 in this question.
这是我为解决问题而对原始代码所做的不同之处。它可能看起来有点模棱两可。
// Used to create a legal SQL string that you can use in an SQL statement in place of mysqli_real_escape_string
public function escape_string($string) {
$newstring = '';
if ($this->dbconn) {
switch ($this->dbtype) {
case 'mysql' :
$newstring = mysqli_real_escape_string ( $this->dbconn, $string );
break;
}
}
return $newstring;
}