Php 注意:未定义变量:mysqli in。。。第63行

Php 注意:未定义变量:mysqli in。。。第63行,php,ajax,mysqli,Php,Ajax,Mysqli,我收到了这个错误,我真的不知道该怎么办。 我正在构建一个“表单”,您可以使用它将信息添加到数据库中。 因为我不希望数据库中有双重记录,所以我正在使用AJAX检查一些字段 在这里,您可以看到我的类的代码,我从中接收错误。(我使用mysqli语言) 一个快速而肮脏的解决方案是使用数据库访问在方法中添加全局$mysqli。这样地 include_once("connection.php"); global $mysqli; $sSql = "INSERT INTO tb

我收到了这个错误,我真的不知道该怎么办。 我正在构建一个“表单”,您可以使用它将信息添加到数据库中。 因为我不希望数据库中有双重记录,所以我正在使用AJAX检查一些字段

在这里,您可以看到我的类的代码,我从中接收错误。(我使用mysqli语言)


一个快速而肮脏的解决方案是使用数据库访问在方法中添加全局$mysqli。这样地
    include_once("connection.php");
    global $mysqli;
        $sSql = "INSERT INTO tblPlaces
            (Name, 
            Street, 
            HouseNumber, 
            City, 
            Category) 
            VALUES 
            ('" . $mysqli -> real_escape_string($this -> m_sName) . "', 
            '" . $mysqli -> real_escape_string($this -> m_sStreet) . "', 
            '" . $mysqli -> real_escape_string($this -> m_sHouseNumber) . "', 
            '" . $mysqli -> real_escape_string($this -> m_sCity) . "', 
            '" . $mysqli -> real_escape_string($this -> m_sCategory) . "')";


    if (!$mysqli -> query($sSql))
    {
        throw new Exception("Er is iets mis gelopen bij het toevoegen van een plaats");
    }

}
?>

我所说的肮脏,是指真正的肮脏但是,如果不这样做的话,您所采用的方法将需要相当大的重组。

一个快速而肮脏的解决方案是使用数据库访问在您的方法中添加全局$mysqli。这样地
    include_once("connection.php");
    global $mysqli;
        $sSql = "INSERT INTO tblPlaces
            (Name, 
            Street, 
            HouseNumber, 
            City, 
            Category) 
            VALUES 
            ('" . $mysqli -> real_escape_string($this -> m_sName) . "', 
            '" . $mysqli -> real_escape_string($this -> m_sStreet) . "', 
            '" . $mysqli -> real_escape_string($this -> m_sHouseNumber) . "', 
            '" . $mysqli -> real_escape_string($this -> m_sCity) . "', 
            '" . $mysqli -> real_escape_string($this -> m_sCategory) . "')";


    if (!$mysqli -> query($sSql))
    {
        throw new Exception("Er is iets mis gelopen bij het toevoegen van een plaats");
    }

}
?>

我所说的肮脏,是指真正的肮脏但是,如果不这样做的话,您的方法将需要相当大的重组。

您不应该在方法声明中使用include。那是一个坏习惯。首先,在构造函数中将MySQLi对象作为参数传递:

include_once("connection.php");
$place = new Places($mysqli) {
    $this->mysqli= $mysqli;
}
然后你会像这样在课堂上使用它

$this->mysqli->real_escape_string
而不是

$mysqli->real_escape_string

您不应该在方法声明中使用include。那是一个坏习惯。首先,在构造函数中将MySQLi对象作为参数传递:

include_once("connection.php");
$place = new Places($mysqli) {
    $this->mysqli= $mysqli;
}
然后你会像这样在课堂上使用它

$this->mysqli->real_escape_string
而不是

$mysqli->real_escape_string

常见的解决方案是将带有连接定义的文件包含在实际使用这些连接的位置(换句话说,在高级代码中),而不是包含在定义了一些与数据库相关的函数和类的库中

文件本身通常是一个类,构造函数和克隆方法都被设置为私有。像这样:

    include_once("connection.php");
    global $mysqli;
        $sSql = "INSERT INTO tblPlaces
            (Name, 
            Street, 
            HouseNumber, 
            City, 
            Category) 
            VALUES 
            ('" . $mysqli -> real_escape_string($this -> m_sName) . "', 
            '" . $mysqli -> real_escape_string($this -> m_sStreet) . "', 
            '" . $mysqli -> real_escape_string($this -> m_sHouseNumber) . "', 
            '" . $mysqli -> real_escape_string($this -> m_sCity) . "', 
            '" . $mysqli -> real_escape_string($this -> m_sCategory) . "')";


    if (!$mysqli -> query($sSql))
    {
        throw new Exception("Er is iets mis gelopen bij het toevoegen van een plaats");
    }

}
?>
class DbConnection {
  private static $connection;
  private function __construct() {} // not needed in this example, really, as we only need a connection, which is a stable resource.
  private function __clone() {} // nothing to see here, move on!
  private function __wakeup() {} // ...and I really mean it!
  public static function getConnection() { 
    if (!isset(self::$connection)) { 
      self::$connection = new mysqli(...);
      // and so created was a connection for all creatures, big and small, 
      // to share and enjoy!
    }
    return self::$connection; 
  }
}
然后,您可以在每次需要连接时使用

  $conn = DbConnection::getConnection();

。。。只包含该类文件一次。

常见的解决方案是包含带有连接定义的文件,这些连接将在其中实际使用(换句话说,在高级代码中),而不是包含在库中,其中定义了一些与数据库相关的函数和类

文件本身通常是一个类,构造函数和克隆方法都被设置为私有。像这样:

    include_once("connection.php");
    global $mysqli;
        $sSql = "INSERT INTO tblPlaces
            (Name, 
            Street, 
            HouseNumber, 
            City, 
            Category) 
            VALUES 
            ('" . $mysqli -> real_escape_string($this -> m_sName) . "', 
            '" . $mysqli -> real_escape_string($this -> m_sStreet) . "', 
            '" . $mysqli -> real_escape_string($this -> m_sHouseNumber) . "', 
            '" . $mysqli -> real_escape_string($this -> m_sCity) . "', 
            '" . $mysqli -> real_escape_string($this -> m_sCategory) . "')";


    if (!$mysqli -> query($sSql))
    {
        throw new Exception("Er is iets mis gelopen bij het toevoegen van een plaats");
    }

}
?>
class DbConnection {
  private static $connection;
  private function __construct() {} // not needed in this example, really, as we only need a connection, which is a stable resource.
  private function __clone() {} // nothing to see here, move on!
  private function __wakeup() {} // ...and I really mean it!
  public static function getConnection() { 
    if (!isset(self::$connection)) { 
      self::$connection = new mysqli(...);
      // and so created was a connection for all creatures, big and small, 
      // to share and enjoy!
    }
    return self::$connection; 
  }
}
然后,您可以在每次需要连接时使用

  $conn = DbConnection::getConnection();


。。。只包含该类文件一次。

您是否包含了连接文件?请,世界上的PHP开发人员,粗体,不要在函数定义中使用
include/require
。我的意思是永不下雨。@raina77为什么?Zend Framework在未设置自动加载器的情况下到处使用
包括
要求
。在函数定义中?真正地PHP仍然是一种解释语言吗?展示一些代码来证明这一点怎么样?同时,看看这个-看看一个很好的例子,说明快乐地抛出require_而不是重新构造代码所导致的问题。你是否包含了连接文件?请,世界上的PHP开发者们,粗体的,永远不要在函数定义中使用
include/require
。我的意思是永不下雨。@raina77为什么?Zend Framework在未设置自动加载器的情况下到处使用
包括
要求
。在函数定义中?真正地PHP仍然是一种解释语言吗?展示一些代码来证明它怎么样?同时,看看这个-看看一个很好的例子,说明快乐地抛出require_而不是重新构造代码所导致的问题。就像你自己说的:肮脏的解决方案。你说快速,我喜欢,但肮脏。。。有没有其他“正确”的解决方案,因为我想以正确的方式来做这件事。@Andreastokholm我同意,但是你能给我一些好的教程,或者网站,让我把事情做好。我真的不知道。到目前为止,我能想到的最好的解决方案是@johnconde:)回答中的解决方案,就像你自己说的:肮脏的解决方案。你说快,我喜欢,但肮脏。。。有没有其他“正确”的解决方案,因为我想以正确的方式来做这件事。@Andreastokholm我同意,但是你能给我一些好的教程,或者网站,让我把事情做好。我真的不知道。到目前为止,我能想到的最佳解决方案是@John Conde:)在回答中的解决方案,以澄清:你并不是说方法中的
include
require
本身就不好。。你说这很糟糕,因为他试图使用包含文件范围内的变量和其他东西。包括包含类(如异常)的文件在框架中非常常见。嗯,“like exceptions”是一个粗体的语句,因为没有一个公共类通常是类似异常的(即停止程序流)。尽管如此,我还是不想碰一个逻辑中隐藏了include的代码。澄清一下:你不是说方法中的
include
require
本身就不好。。你说这很糟糕,因为他试图使用包含文件范围内的变量和其他东西。包括包含类(如异常)的文件在框架中非常常见。嗯,“like exceptions”是一个粗体的语句,因为没有一个公共类通常是类似异常的(即停止程序流)。尽管如此,我还是不想碰一个包含隐藏在逻辑中的代码。我可能是我的错,但我发现了一些问题,我用INCLUDE替换了INCLUDE\u,现在我可以向我的数据库中添加一些东西,但只有在没有AJAX的情况下,当我使用AJAX时,表单检查值是否已经在数据库中,但当我添加它们时,什么也没有发生。我也没有收到任何错误。我还收到了来自ajax的正确信息。有人能帮忙吗?好的,伙计们,我试过你们的几种解决方案,但都不管用。我可能是我的错,但我发现了一些东西,我用INCLUDE替换了INCLUDE\u,现在我可以向我的数据库中添加一些东西,但只有在没有AJAX的情况下,当我使用AJAX时,它才是