如何在php

时间:2017-07-07 07:38:07

标签: php mysqli

我知道你是php的新手,我有一些问题(比如任何新的开始)我的问题是我不能将config.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');

问题是我无法从$connect获取config.php变量来处理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

由于

4 个答案:

答案 0 :(得分:4)

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

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

function rows($table){

    global $connect;

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

答案 1 :(得分:4)

有两种可行的方法可供选择。

1.Passing $ connect作为函数的第二个参数

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

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

答案 2 :(得分:3)

问题是你在全局范围内声明一个变量,但是在全局范围内可用的任何内容都不会在函数范围内自动提供,除非你强制它通过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);
}

答案 3 :(得分:0)

你需要在你的函数中启动一个新的对象配置,并使用constructer来连接到这样的数据库

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

如果你在config.php

中完成了一个类配置,这是有效的