首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >警告: mysqli_real_escape_string()需要精确的两个参数,其中一个是.致命错误:调用null上的成员函数query()

问警告: mysqli_real_escape_string()需要精确的两个参数,其中一个是.致命错误:调用null上的成员函数query()
EN

Stack Overflow用户
提问于 2015-11-18 09:20:30
回答 2查看 548关注 0票数 2

我的数据库连接有问题,我真的不明白我该做什么。有人能帮我吗?

警告: /customers/f/4/7/zebratv.se/httpd.www/classes/db.php ()需要精确的2个参数,第47行上的/customers/f/4/7/zebratv.se/httpd.www/classes/db.php给出了一个参数,致命错误:调用第61行的/customers/f/4/7/zebratv.se/httpd.www/classes/db.php中null的成员函数查询()

代码语言:javascript
复制
<?php
class db
{

    public function __construct()
    {
        global $CONFIG;
        $mysqli = $CONFIG->get("database");
        $this->dbconn($mysqli["host"], $mysqli["username"], $mysqli["password"], $mysqli["database"]);

    }
    private function dbconn($mysqli_host, $mysqli_user, $mysqli_pass, $mysqli_db)
    {


        if (!($conn = new mysqli($mysqli_host, $mysqli_user, $mysqli_pass)))
        {
          switch (mysqli_errno($conn))
          {
            case 1040:
            case 2002:
                if ($_SERVER[REQUEST_METHOD] == "GET")
                    die("<html><head><meta http-equiv=refresh content=\"5 $_SERVER[REQUEST_URI]\"></head><body><table border=0 width=100% height=100%><tr><td><h3 align=center>The server load is very high at the moment. Retrying, please wait...</h3></td></tr></table></body></html>");
                else
                    die("Too many users. Please press the Refresh button in your browser to retry.");
            default:
                die("[" . mysqli_errno($conn) . "] dbconn: mysqli_connect: " . mysqli_error($conn));
          }
        }
        mysqli_select_db($conn, $mysqli_db)
            or die('dbconn:  mysqli_select_db: ' + mysqli_error($conn));

        usercontrol::userlogin();
    }
    public function sql_query($query)
    {    
        @++$_SESSION['totalqueries'];
        return $conn->query($query);
    }

    public function sanitize($var)
    {
        return($this->sqlesc((htmlspecialchars($var))));
    }
    function sqlesc($x) {
         return "'".mysqli_real_escape_string($x)."'";
    }
    public function sqlerr($file = '', $line = '')
    {
      print("<table border=0 bgcolor=blue align=left cellspacing=0 cellpadding=10 style='background: blue'>" .
        "<tr><td class=embedded><font color=white><h1>SQL Error</h1>\n" .
      "<b>" . mysqli_error() . ($file != '' && $line != '' ? "<p>in $file, line $line</p>" : "") . "</b></font></td></tr></table>");
      die;
    }
    public function get_row_count($table, $suffix = "")
    {
        if ($suffix)
            $suffix = " $suffix";
        $query = "SELECT COUNT(*) FROM ".$table."".$suffix;
        $r = $conn->query($query) or die(mysqli_error());
        $a = $conn->fetch_row($r) or die(mysqli_error());
        return $a[0];
    }

}
$DB = new db;
?>
EN

回答 2

Stack Overflow用户

发布于 2015-11-18 09:25:03

字符串函数需要数据库链接作为第一个参数。所以改变

代码语言:javascript
复制
mysqli_real_escape_string($x)

使用

代码语言:javascript
复制
mysqli_real_escape_string($conn, $x)
票数 4
EN

Stack Overflow用户

发布于 2015-11-18 09:25:16

问题在于:

代码语言:javascript
复制
function sqlesc($x) {
     return "'".mysqli_real_escape_string($x)."'";
}

这个错误非常简单--当您提供两个参数时,您只提供一个参数。这是函数的文档。

mysqli_real_excape_string()期望第一个参数是当前mysqli连接,第二个参数是字符串:

代码语言:javascript
复制
mysqli_real_excape_string($conn,$x);

显然,您需要首先将该变量传递给函数。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33776004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档