无法从函数连接到数据库

时间:2013-05-12 04:19:28

标签: php mysqli user-defined-functions

让我提前道歉。我整天都在研究这个项目而且我很累,可能只是需要睡眠,但我似乎无法通过函数连接到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

function 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);
}

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

我尝试将连接数据设为全局,但这不起作用,我觉得这是一个坏主意。

我觉得我应该更多地了解课程系统和功能以及其他内容,但我只想让它发挥作用。

很抱歉,如果它就在我面前。我甚至尝试将连接代码放在函数中但仍然蹲下。

再次抱歉这个愚蠢的问题。特别是由于它是关于连接到数据库的事实: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;

}

6 个答案:

答案 0 :(得分:2)

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

像这样:

function selectFromDatabase($table_name, $con)
{
    ...
}

答案 1 :(得分: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传递给函数,或者你可以保持它相同并使用全局连接,就像发布的另一个人一样。

答案 2 :(得分: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);
        }
    }

答案 3 :(得分: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');

}

答案 4 :(得分: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;

}

答案 5 :(得分:-3)

使用内部功能

global $con;