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

最初のパラメーターは 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 を使用するだけです。私のプロジェクトでは、通常、すべてのクエリを実行して結果を返す関数が 1 つあります。

function executeQuery($payload){

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

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

     //Return result
     return $result;

}
4

6 に答える 6

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 を使用するだけです。私のプロジェクトでは、通常、すべてのクエリを実行して結果を返す関数が 1 つあります。

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 に答える