mysql_real_escape_string在localhost中完美运行,无法在线工作

时间:2015-07-29 14:15:00

标签: php filter localhost

在页面http://www.immocorbati.be/tehuur.php上,过滤功能无法正常工作。只有" Prijsklasse" (价格)有效。但是,如果您过滤" Gemeente" (区域)例如,它应该返回1个家,但它没有找到。与" Type"相同工作室应该返回3,但不会返回任何内容和#34; Slaapkamer" (卧室)3个slaapkamers应返回1个家,但不会再显示。

我不明白为什么它在localhost上完美运行,并且它可以在线工作一半,因为这意味着功能已达到。这是文件。也许有人指出为什么会这样?是否可能与数据库相关?但是后端的所有其他功能都可以正常工作。

class Pand
{

    //DB settings - Don't worry these are correct
    private $m_sHost = "??????";
    private $m_sUser = "????????";
    private $m_sPassword = "??????";
    private $m_sDatabase = "????????";     

    public function GetToonPandenHuurFilter()
    {
    //de panden worden op pagina getoond volgens filter
            if ($link = mysqli_connect($this->m_sHost, $this->m_sUser, $this->m_sPassword, $this->m_sDatabase))
            {

                    $b = $_POST['typewoning'];
                    $p = $_POST['plaats'];
                    $s = $_POST['slaapkamers'];
                    $k = $_POST['prijsklasse'];


                    $sSql = "select * from tblpand WHERE PandVerkoopstype='Te huur' AND PandOnline='Ja'";
                    if ($b !== 'all') {
                            $sSql .= " AND PandBebouwing='" . mysql_real_escape_string($b) . "'";
                    }                      
                    if ($p !== 'all') {
                            $sSql .= " AND PandPostcodeGemeente='" . mysql_real_escape_string($p) . "'";
                    }
                    if ($s !== 'all') {
                            $sSql .= "AND PandSlaapkamers='" . mysql_real_escape_string($s) . "'";
                    }
                    if ($k == '0') {
                            $sSql .= "";
                    }
                    if ($k == '1') {
                            $sSql .= "AND PandPrijs <'" . 301 . "'";
                    }
                    if ($k == '2') {
                            $sSql .= "AND PandPrijs <'" . 501 . "'";
                    }
                    if ($k == '3') {
                            $sSql .= "AND PandPrijs <'" . 701 . "'";
                    }
                    if ($k == '4') {
                            $sSql .= "AND PandPrijs <'" . 701 . "'";
                    }


                    $rResult = mysqli_query($link, $sSql);
                    return $rResult;
            }
            else
            {
                    // er kon geen connectie gelegd worden met de databank
                    throw new Exception('Ooh my, something terrible happened to the database connection'); 
            }      
            mysqli_close($link);
    }
}

我添加了错误报告,反馈说:

mysql_real_escape_string(): Access denied for user ''@'10.246.64.177'
(using password: NO) in /customers/e/a/b/immocorbati.be/httpd.www/classes/Pand.class.php on line 1086

第1086行是:

$sSql .= " AND PandBebouwing='" . mysql_real_escape_string($b) . "'";

1 个答案:

答案 0 :(得分:2)

mysql_real_escape_string需要数据库连接才能完成工作。 mysql_real_escape_string属于mysql API。你正在使用mysqli建立连接。 mysql和mysqli是两个完全不同的数据库API; mysqli连接对mysql_ *没用。 mysql有一个坏习惯,即在需要时隐式(尝试)建立连接。在您的localhost上,它尝试建立的隐式连接正常工作(默认用户名,无密码等)。在您的主机上,它没有。

使用mysqli时请勿使用mysql_real_escape_string。使用mysqli's parameter binding API或至少mysqli_real_escape_string