【问题标题】:undefined variable in mysqli but it is defined in the constructormysqli中未定义的变量,但它是在构造函数中定义的
【发布时间】:2013-02-05 20:11:54
【问题描述】:

我正在尝试使用 mysqli,但它一直给我一个错误,即使我一直在 试图修复它几个小时。

这是数据库类

class db {

    public $mysqli;

    function __construct(){
        $mysqli = new mysqli('host', 'user', 'password', 'database');
    }

    function clean($string){
        $string = $mysqli->real_escape_string($string);
    }

}

当我尝试在这样的测试页面中调用它时,

$db = new db();
$db->clean("hi");

我得到一个错误:

注意:未定义变量:第 12 行 C:\xampp\htdocs\eat\class\db.class.php 中的 mysqli

致命错误:在第 12 行对 C:\xampp\htdocs\eat\class\db.class.php 中的非对象调用成员函数 real_escape_string()

我在这里做错了什么吗?我已经在 stackoverflow 上搜索了很长时间的 php 手册,但似乎没有其他人面临这个错误。

【问题讨论】:

  • php oop variable scope 的可能重复项
  • 是的,我明白你的意思。我在那里忽略了这一点,2 位绅士帮助我解决了这个问题。但不知何故,real_escape_string 给出了一个我似乎无法克服的致命错误。

标签: php mysqli


【解决方案1】:

您在方法范围内使用变量$mysqli。您应该使用$this 来访问对象范围。

class db {

    public $mysqli;

    function __construct(){
        $this->mysqli = new mysqli('host', 'user', 'password', 'database');
    }

    function clean($string){
        return $this->mysqli->real_escape_string($string);
    }

}

【讨论】:

  • 但它仍然会返回致命错误:在非对象上调用成员函数 real_escape_string()
  • 我也不知道为什么。如果我要在一页中声明它而不是把它放在一个类中,它根本不会给我带来任何问题。
  • 您可能没有建立连接。在你的new mysqli() 行之后添加这个——if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); }
  • 还是同样的错误。我想这意味着我已连接到数据库。或者看起来是这样,或者会有一个新的错误。
【解决方案2】:

你有没有听说过不在类方法中声明变量As is

在引用变量范围时,您必须始终使用$this->

下面是如何访问变量的蓝图

class foo {

$who= "MyName";

function __construct() {

$this->who;

}

}

在上面的示例中,函数中的who 指的是变量。

【讨论】:

  • 我听说过。那是我的错。但问题是致命错误。致命错误:在非对象上调用成员函数 real_escape_string()
  • @NuttyNur 我认为问题在于你没有在你的类中传递 mysql 连接详细信息。
  • 我确实通过了。我做了一个连接测试,没问题。
  • 我正在使用 mysqli。但是继续 mysqli_real_escape_string() 给了我同样的错误
  • this或许能帮到你
猜你喜欢
  • 2015-05-24
  • 1970-01-01
  • 2011-06-06
  • 2018-01-29
  • 2018-05-25
  • 1970-01-01
  • 1970-01-01
  • 2020-10-18
  • 2021-07-06
相关资源
最近更新 更多