2016-08-19 131 views
3

我有这个外部文件CreateConnection.php有一个类DBController及其以下功能。 createconnection文件不会遇到错误。PHP在外部文件中调用类中的函数,语法?

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,但我的 '$连接' 调用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 
+0

'$ connect'不会返回'Mainconnect()'函数 – devpro

+0

'mysqli_real_escape_string'后应该使用'stripcslashes'吗?密码也应该散列。 – chris85

+1

如果mainConnect()中存在'$ connect',则返回它。 – devpro

回答

7

在添加return $connect;function mainConnect(){结束,你很好。

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

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

文件名听起来像那么其会在创建连接其包括但不是这种情况:)

+0

嗯,这是不是一个好习惯使用类的连接先生?有人说最好的方法是使用PDO。 –

+0

这是一个很好的实践,但MYSQLi本身有类。因此,要构建DBConnector,最好使用它的类版本。 – JustOnUnderMillions

+0

@laurence keith albano更新了我的答案 – JustOnUnderMillions