【问题标题】:PHP Calling a function inside a class in an external file, Syntax?PHP在外部文件的类中调用函数,语法?
【发布时间】:2016-12-26 19:07:00
【问题描述】:

我有这个外部文件 CreateConnection.php,它有一个 DBController 类及其以下函数。 createconnection 文件没有遇到任何错误。

CreateConnection.php里面的文件

<?php
class DBController
{
    private $servername = "localhost";
    private $username = "root";
    private $password = "";
    private $database = "mydatabase";

    function mainConnect()
    {
        //call the function connectDatabase to $connect
        $connect = $this->connectDatabase();

       //call the function selectDatabase
        $this->selectDatabase($connect);

        if(!$connect)
        {
            //Otherwise, prompt connection failed
            die("Connection failed: ".mysqli_connect_error());
        }
    }

    function connectDatabase()
    {
        //Create connection
        $connect = mysqli_connect($this->servername, $this->username, $this->password);
        return $connect;
    }

    function selectDatabase($connect)
    {
         //Select database
         mysqli_select_db($connect, $this->database);
    }
}
?>

在这个文件中,我包含了外部 CreateConnection.php ,但是我的 '$connect' 在调用 mainConnect() 函数时遇到了很多错误。 Process.php 文件

<?php
    include("CreateConnection.php");
    $DBHandler = new DBController();

    $connect = $DBHandler->mainConnect();

    //Get values from form LoginReminder.php file
    $username = mysqli_real_escape_string($connect, $_POST['username']);
    $password = mysqli_real_escape_string($connect, $_POST['password']);
    //Removes back slashes in input
    $username = stripcslashes($username);
    $password = stripcslashes($password);

    //Query the database for users
    $result = mysqli_query($connect,"select * from tablereminders where username = '$username' and password = '$password' ");

    //Error connection and query
    if (!$result)
    {
        printf("Error: %s\n", mysqli_error($connect));
        exit();
    }
?>

我的语法是否不正确,因为我在提交表单时遇到了这么多错误:

错误

Warning: mysqli_real_escape_string() expects parameter 1 to be mysqli, null given in C:\xampp\htdocs\Web Php Tutorial\LoginProcess.php on line 8

Warning: mysqli_real_escape_string() expects parameter 1 to be mysqli, null given in C:\xampp\htdocs\Web Php Tutorial\LoginProcess.php on line 9

Warning: mysqli_query() expects parameter 1 to be mysqli, null given in C:\xampp\htdocs\Web Php Tutorial\LoginProcess.php on line 15

Warning: mysqli_error() expects parameter 1 to be mysqli, null given in C:\xampp\htdocs\Web Php Tutorial\LoginProcess.php on line 20

【问题讨论】:

  • $connect 不在Mainconnect() 函数中返回
  • 应该在mysqli_real_escape_string之后使用stripcslashes吗?密码也应该被散列。
  • 如果 $connect 存在于 mainConnect() 中,则返回它。

标签: php function class mysqli


【解决方案1】:

function mainConnect(){的末尾加上return $connect;就可以了。

但是为什么你根本不使用 MYSQLi 的 OOP 版本呢?

mysqli, OOP vs Procedural

class DBController
{ 
   private $db;

   private $servername = "localhost";
   private $username = "root";
   private $password = "";
   private $database = "mydatabase";

   function __construct(){
      $this->db = new mysqli($this->servername, $this->username, $this->password);
      $this->db->select_db($this->database);
   }
   function db(){
      return $this->db;
   }

}
$connection = new DBController();

#now instead of  using mysqli_query();
$connection->db()->query('SQL QUERY');

一个只包含一个类的文件应该有这个作为名称:

而不是CreateConnection.php 更好DBController.php

文件名听起来像是在包含它时会创建一个连接,但事实并非如此:)

【讨论】:

  • 嗯,先生,这不是使用类进行连接的好习惯吗?有人说最好的方法是使用 PDO。
  • 这是一个很好的实践,但是MYSQLi本身有类。因此,要构建您的 DBConnector,您最好使用它的类版本。
  • PDOMYSQLi 目前是您的选择,但切勿使用 MYSQL 并尽量避免 procedural 使用。如果我有帮助,请把我的答案固定为正确的:)
  • @laurencekeithalbano 如果您需要自己滚动,请尝试extend-ing 类而不是包装它。这样效果更好
猜你喜欢
  • 1970-01-01
  • 2019-02-10
  • 2013-07-28
  • 1970-01-01
  • 2011-05-10
  • 1970-01-01
  • 2011-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多