2016-04-11 9 views
2

に動作します:SQLクエリは、私は、次のPHPスニペットを持って外に機能

function getFacilities($testName, $dbAdapter) { 
    $sql1 = "SELECT * FROM facilities_db WHERE facility_name = '$testName'"; 
    $result1 = $dbAdapter->query($sql1); 

    $facility_details = array(); 
    while ($row = mysqli_fetch_assoc($result1)) 
    { 
    $facility_details[] = $row; 
    } 
    return $facility_details; 
} 

$testName = "Abraham Moss Leisure"; 
$facility_data = getFacilities($testName, $mysqli); 

$テスト名の値がちょうどテストの目的のために任意です。これは答えの1つの関数ですが、私の最初の定義の唯一の違いは$ dbAdapterをパラメータとして持たないことでした。

+2

は、あなたの関数を定義する方法私たちを見ます! – Saty

+2

あなたの関数全体を投稿してください&あなたはどのように関数をパラメータで呼びましたか? –

+0

paramsを使用しているときは ' – 25r43q

答えて

6

パラメータとして$ testNameを設定するだけでなく、SGBD(ここではmysqli)への接続に使用するアダプタも設定する必要があります。

function getFacilities($testName, $dbAdapter) { 
    $sql1 = "SELECT * FROM facilities_db WHERE facility_name = '$testName'"; 
    $result1 = $dbAdapter->query($sql1); 

    $facility_details = array(); 
    while ($row = mysqli_fetch_assoc($result1)) 
    { 
     $facility_details[] = $row; 
    } 
    return $facility_details; 
} 

私たちは、関数へごdbAdapterとして$testName$mysqliを渡す必要があります。 したがって、これは我々が機能を呼び出す方法です:これがお手伝いします

$facility_data = getFacilities($testName, $dbAdapter); 

希望、

+0

返される配列はまだ空です:(例えば、$ testNameの代わりに文字列を使用して関数を呼び出すと、同じことが起こります) – arch1ve

+0

それは関数なしで動作しますか? – Unex

+0

はい。 – arch1ve

-1
function getFacilities($testName) { 
      global $dbAdapter; 
     $sql1 = "SELECT * FROM facilities_db WHERE facility_name = '$testName'"; 
     $result1 = $dbAdapter->query($sql1); 

     $facility_details = array(); 
     while ($row = mysqli_fetch_assoc($result1)) 
     { 
      $facility_details[] = $row; 
     } 
     return $facility_details; 
    } 

$testName = "Abraham Moss Leisure"; 
$facility_data = getFacilities($testName); 

がグローバルとして接続変数を宣言し、$テスト名

+0

私は 'なぜ、これはうまくいきましたか?ありがとうございました! – arch1ve

+0

omg、please、no ...なぜPHPのメンテナーがその 'global'をまだ削除していないのですか? –

+0

グローバル変数は使用しないでください。それは非常に高い技術的負債につながります。 – Unex

0

に値を渡しますテストクエリの結果:

print_r(mysqli_fetch_assoc($result)); 

test $mysqli in functio N:

function get($testName, $adapter) { if (!isset($adapter)) echo 'no'; } 

使用静的データベース接続:

class GlobalClass { public static $db = null; } 

class Connection { 
public $connection = null; 
public function connect() { 
    if ($connection == null) 
     // operation 
    $this->connection = 'obj'; 
}} 


$db = new Connection(); 
$db->connect(); 
GlobalClass::$db = new Connection(); 
GlobalClass::$db->connect(); 
GlobalClass::$db->connection->query($sql); 

function yourFunction($testName) { 
    $sql1 = "SELECT * FROM facilities_db WHERE facility_name = '$testName'"; 

    $result1 = GlobalClass::$db->connection->query($sql1); 

    $facility_details = array(); 
    while ($row = mysqli_fetch_assoc($result1)) { 
     $facility_details[] = $row; 
    } 
    return $facility_details; 
} 
+0

努力してくれてありがとうございますが、データベース接続はすでに書かれています。問題を解決しました。 – arch1ve

関連する問題