2015-11-06 55 views
0

我剛開始編碼PHP和我有包括檔案瞭解包括

我已經創建了3個文件

main.php

<?php 
include "dbprovider.php"; 
$param = $_GET["q"]; 
if(!isset($param) || $param == ""){echo "Parameter null"; return;} 

switch ($param) { 
    case 'login': 
     loginProc(); 
     break; 
} 

function loginProc() 
{ 
    pdo_mysql_nonquery($somequery,$somearrayparameters); 
}  
?> 

dbprovider問題。 php

<?php 
include "config.php"; 
function pdo_mysql_nonquery($query,$params) 
{ 
    $conn = new PDO("mysql:host={$host};dbname={$dbname};charset={$charset}",$dbusername,$dbpassword) or die("Couldn't connect to the database."); 
    $query = $conn->prepare($query); 
    return ($params == null ? $query->execute() : $query->execute($params)); 
} 
?> 

的config.php

<?php 
$host = '127.0.0.1'; 
$dbusername = 'root'; 
$dbpassword = ''; 
$dbname = 'dbname'; 
$charset = 'utf-8'; 
?> 

我的問題是,我必須做一些錯誤的原因,當我在main.php調用pdo_mysql_nonquery(),我得到這個錯誤

Notice: Undefined variable: host 
Notice: Undefined variable: dbname 
Notice: Undefined variable: charset 
Notice: Undefined variable: dbusername 
Notice: Undefined variable: dbpassword 

當我直接調用dbprovider.php並回顯連接字符串時,它打印出來很好。

我到底做錯了什麼?

回答

0

您已包含該文件,但值不會傳遞到您的函數。

<?php 

    function pdo_mysql_nonquery($query,$params) 
    { 
     include "config.php";// move here 
     $conn = new PDO("mysql:host={$host};dbname={$dbname};charset={$charset}",$dbusername,$dbpassword) or die("Couldn't connect to the database."); 
     $query = $conn->prepare($query); 
     return ($params == null ? $query->execute() : $query->execute($params)); 
    } 

?>

或作出GLOBAL VARIABLES,使他們能夠在任何地方在您的文件訪問這些變量。

+0

哦,jeez。我認爲這些包括像C#中的'using'這樣的工作。非常感謝。我現在明白了。 –

+0

很高興幫助你:) –

0

你變量的訪問他們的範圍:

<?php 
function pdo_mysql_nonquery($query,$params) 
{ 
    include "config.php"; 
    $conn = new PDO("mysql:host={$host};dbname={$dbname};charset={$charset}",$dbusername,$dbpassword) or die("Couldn't connect to the database."); 
    $query = $conn->prepare($query); 
    return ($params == null ? $query->execute() : $query->execute($params)); 
} 
?> 

<?php 
include "config.php"; 
function pdo_mysql_nonquery($query,$params) 
{ 
    global $host; 
    global $dbname; 
    // and so on 
    $conn = new PDO("mysql:host={$host};dbname={$dbname};charset={$charset}",$dbusername,$dbpassword) or die("Couldn't connect to the database."); 
    $query = $conn->prepare($query); 
    return ($params == null ? $query->execute() : $query->execute($params)); 
} 
?> 

但我建議對全局變量。

作爲解釋,includerequire只是簡單地取出文件的內容並在當前範圍內對其進行評估。

在你的特殊情況下,db憑證變量是在函數上面創建的。因此在函數內部不可訪問。

+0

非常感謝。 –

+0

樂意幫忙! –