0

让我提前道歉。我整天都在做这个项目,我很累,可能只是需要睡觉,但我似乎无法从函数连接到 mysql 数据库。

我有一个被调用的数据库文件,require_once()并且有一个被调用的函数,但它似乎不想连接。

这是连接代码:

// Create connection
$con  =  mysqli_connect("$database_serverURL","$database_username","$database_password","$database_dbName");

 // Check connection
 if (mysqli_connect_errno($con))
 {
  $database_error = true;
  $database_errorInfo = mysqli_connect_errno($con);
 }

 $database_error = false;

这是我的功能:

//Select from database

函数 selectFromDatabase($table_name){

    //Declare array
$return_array = array();

    //Make query
$result = mysqli_query($con,"SELECT * FROM $table_name");

while($row = mysqli_fetch_array($result)){

    $return_array = $row[];

}

writeJson($return_array); 

//close database connection
mysqli_close($con);
}

它说第一个参数为空,它应该是数据库连接信息。我知道我可以连接到数据库并从表中提取信息,但是当它在函数内部时它不想工作。

我尝试将连接数据设为全局,但没有奏效,我觉得这是个坏主意。

我觉得我应该更多地了解类系统和功能以及其他东西,但我只是希望它能够工作。

对不起,如果它就在我面前。我什至尝试将连接代码放在函数中,但仍然蹲着。

再次为这个愚蠢的问题感到抱歉。特别是因为它是关于连接到数据库的事实:P

编辑:

这是我第一次尝试创建面向对象的脚本。这是我的最终解决方案。

我有一个名为的配置脚本class_config.php

<?php

class declarations{

     //Define variables
     private $databaseArray;

     //Populate variables
     public function populateVariables(){

          $this->databaseArray = array('databaseServer', 'databaseUsername', 'databasePassword', 'databaseName');

     }

     //Return variable requested
     public function returnVariable($variable){

          $this->populateVariables();

          return $this->$variable;

     }

}

?>

数据库类(class_database.php):

<?php

//Include config class
require_once('class_config.php');

function createInstance(){

     //Create class instance
     $obj = new declarations;

     //Return class instance
     return $obj;

}

function connectDB(){

     //Create class instance
     $obj = createInstance();

     //Get database array from 'declarations' class
     $databaseArray = $obj->getVariable('databaseArray');

     //Create strings from array values
     list ($serverURL, $username, $password, $databaseName) = $databaseArray;

     //Create database connection
     $con = mysqli_connect($serverURL, $username, $password, $databaseName);

     //Return connection
     return $con;

}

?>

每当我需要数据库连接时,我只需调用数据库连接函数。我会使用 $con = connectDB(); 创建一个实例 并在我的查询中使用 $con 。在我的项目中,我通常有一个执行所有查询并返回结果的函数:

function executeQuery($payload){

     //Create database connection
     $con = connectDB();

     //Execute database query
     $result = mysqli_query($payload);

     //Return result
     return $result;

}
4

6 回答 6

2

至少,您必须将 $con 传递给您的函数才能使用它。

像这样:

function selectFromDatabase($table_name, $con)
{
    ...
}
于 2013-05-12T04:35:41.057 回答
1

也许 $con 超出了您的功能范围。如果您将函数重写为

function selectFromDatabase($con, $table_name){
   //Declare array
   $return_array = array();

    //Make query
    $result = mysqli_query($con,"SELECT * FROM $table_name");

    while($row = mysqli_fetch_array($result)){

        $return_array = $row[];

    }

    writeJson($return_array); 

    //close database connection
    mysqli_close($con);
    }
}

然后将 $con 传递给函数,或者您可以保持它不变并像其他人发布的那样使用全局连接。

于 2013-05-12T04:34:41.040 回答
0

您的变量 $con 对您的连接文件是本地的您需要创建一个更全局范围的变量或使您的连接成为一个函数以返回一个值或执行全局 $con

function selectFromDatabase($con, $table_name){


     //Declare array
       $return_array = array();

        enter code here
        global $con; //include this
        //Make query
        $result = mysqli_query($con,"SELECT * FROM $table_name");

        while($row = mysqli_fetch_array($result)){

            $return_array = $row[];

        }

        writeJson($return_array); 

        //close database connection
        mysqli_close($con);
        }
    }
于 2013-05-12T04:45:30.280 回答
0

我最终创建了一个类,并拥有一个私有字符串和一个连接数据库的函数:

class database{

private $con;

private function connectDB(){

    $this->con = new mysqli("server","username","password","dbName");
    return $this->con;

}

然后只是实例化对象:

function createInstance(){

$obj = new database;

}

function requireDatabase{

    $obj = createInstance();

    $con = $obj->connectDB();

    mysqli_query($con, 'SELECT * FROM foo');

}
于 2013-06-04T22:46:13.547 回答
0

这是我第一次尝试创建面向对象的脚本。这是我的最终解决方案。

我有一个名为的配置脚本class_config.php

<?php

class declarations{

     //Define variables
     private $databaseArray;

     //Populate variables
     public function populateVariables(){

          $this->databaseArray = array('databaseServer', 'databaseUsername', 'databasePassword', 'databaseName');

     }

     //Return variable requested
     public function returnVariable($variable){

          $this->populateVariables();

          return $this->$variable;

     }

}

?>

数据库类(class_database.php):

<?php

//Include config class
require_once('class_config.php');

function createInstance(){

     //Create class instance
     $obj = new declarations;

     //Return class instance
     return $obj;

}

function connectDB(){

     //Create class instance
     $obj = createInstance();

     //Get database array from 'declarations' class
     $databaseArray = $obj->getVariable('databaseArray');

     //Create strings from array values
     list ($serverURL, $username, $password, $databaseName) = $databaseArray;

     //Create database connection
     $con = mysqli_connect($serverURL, $username, $password, $databaseName);

     //Return connection
     return $con;

}

?>

每当我需要数据库连接时,我只需调用数据库连接函数。我会使用 $con = connectDB(); 创建一个实例 并在我的查询中使用 $con 。在我的项目中,我通常有一个执行所有查询并返回结果的函数:

function executeQuery($payload){

     //Create database connection
     $con = connectDB();

     //Execute database query
     $result = mysqli_query($payload);

     //Return result
     return $result;

}
于 2013-08-03T23:17:43.483 回答
-3

使用内部函数

global $con;
于 2013-05-12T04:27:00.873 回答