2017-07-07 85 views
1

我在PHP是新的,你知道所有的功能文件和我有一些问题(像任何新的开始),我的问题是我不能包括像config.php所有功能文件中的文件我怎么能包括在PHP

我刚才3个文件

config.php

我只是连接到数据库的mysqli和变量是$connect

在functions.php中存在的仅仅是简单的功能

include('config.php'); 
function rows($table){ 
    $gettables = mysqli_query($connect,"SELECT * FROM $table"); 
    $numrows = mysqli_num_rows($gettables); 
    return($numrows); 
} 
的index.php中

include('functions.php'); 
echo rows('books'); 

和问题

是我不能得到config.php$connect变量函数工作在functions.php文件。

编辑

当我包括config.php功能里面的一切都会好的, 这样

function rows($table){ 
include('config.php'); 
    $gettables = mysqli_query($connect,"SELECT * FROM $table"); 
    $numrows = mysqli_num_rows($gettables); 
    return($numrows); 
} 

,但我不想这样做,因为我想包括一个config.php我拥有的所有功能。

谢谢

+0

尝试require_once代替包括 – Exprator

+2

要么移动到类,将变量'连接'传递给函数,而不是包含它或使用'全球'关键字 – DarkBee

+0

@Exprator我试过了,没有工作。 –

回答

3

$ config存在于'config.php'中。

在你的函数中,声明$ connect为'global'即:它存在于这个函数的范围之外。

function rows($table){ 

    global $connect; 

    $gettables = mysqli_query($connect,"SELECT * FROM $table"); 
    $numrows = mysqli_num_rows($gettables); 
    return($numrows); 
} 
+0

非常感谢您的支持<3,感谢@ DarkBee。 (相同的答案:)) –

3

有两种可能的方式可用。

1.Passing $作为第二个参数连接到功能

include('config.php'); 
function rows($table,$connnect){ 
    $gettables = mysqli_query($connect,"SELECT * FROM $table"); 
    $numrows = mysqli_num_rows($gettables); 
    return($numrows); 
} 
  • 声明$连接作为全局变量

    function rows($table){ 
         global $connect; 
         $gettables = mysqli_query($connect,"SELECT * FROM $table"); 
         $numrows = mysqli_num_rows($gettables); 
         return($numrows); 
        } 
    
  • 建议将$ connect作为参数传递给函数。不建议使用全局变量,请参考Are global variables in PHP considered bad practice? If so, why?

    +0

    感谢信息伙计,我会使用全球,因为我的代码很简单,在其他项目中,我不会忘记你的话:),再次感谢 –

    2

    问题是你在全局范围声明了一个变量,但是全局范围中可用的任何东西都不会在函数范围中自动提供,除非你通过global $connect强制它有自己的注意事项。

    global的一些替代品将是。

    1)使用一个单独的类:

    <?php 
    //File connect.php 
    class Connection { 
        private static $connection = null; 
        public static get() { 
          if (self::$connection == null) { self::$connection = mysqli_connect(...); } 
          return self::$connection; 
        } 
    } 
    

    并以此

    include_once('connect.php'); 
    function rows($table){ 
        $gettables = mysqli_query(Connection::get(),"SELECT * FROM $table"); 
        $numrows = mysqli_num_rows($gettables); 
        return($numrows); 
    } 
    

    2)常量(不是最好的主意):

    <?php 
    //File config.php 
    define('CONNECTION',mysqli_connect(...)); 
    

    用途为:

    include_once('config.php'); 
    function rows($table){ 
        $gettables = mysqli_query(CONNECTION,"SELECT * FROM $table"); 
        $numrows = mysqli_num_rows($gettables); 
        return($numrows); 
    } 
    

    3)把它作为参数传递给函数(config.php文件是你现在拥有它):

    function rows($connection, $table){ 
        $gettables = mysqli_query($connection,"SELECT * FROM $table"); 
        $numrows = mysqli_num_rows($gettables); 
        return($numrows); 
    } 
    

    用作:

    include('config.php'); 
    include_once('functions.php'); 
    echo rows($connection, 'books'); 
    

    4)有类似的档案工作变量声明

    <?php 
    //config.php 
    return mysqli_connect(...); 
    

    用途为:

    function rows($table){ 
        $connect = include('config.php'); 
        $gettables = mysqli_query($connect,"SELECT * FROM $table"); 
        $numrows = mysqli_num_rows($gettables); 
        return($numrows); 
    } 
    
    0

    你需要开始自己的函数中的新对象的配置和使用的建筑工,以瞬移到数据库这样

    $c=new config(); 
    $con=$c->connect(); 
    $req="SELECT * FROM table"; 
    $conn=$con->query($req); 
    

    这个作品,如果你已经在config.php做了类配置