2016-12-26 56 views
-1

對於php來說很新,並且在從外部配置文件加載值方面存在問題。我將它用於我的數據庫連接,有時它會返回值,但有時它會返回null。我一直在與此戰鬥數小時,似乎無法找到任何信息。外部文件的格式是這樣外部配置文件始終沒有加載數據

[database] 
db_name = "atmc_timesheet" 
db_user = "username" 
db_pass = "password" 

我訪問它像這樣

function connect_db() 
{ 
    $ini = parse_ini_file("../../../atmc_timesheet_config.ini", TRUE); 

    $dbhost = 'localhost'; 
    $db_name = $ini['database']['db_name']; 
    $user_name = $ini['database']['db_user']; 
    $pass = $ini['database']['db_pass']; 

    $dsn = "mysql:dbname=$db_name;host=$dbhost"; 

    try { 
     $pdo = new PDO($dsn, $user_name, $pass); 
     $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     return $pdo; 
    } 
    catch (Exception $e) { 
     echo "Error : ".$e->getMessage(); 
    } 

} 

它適合我的登錄腳本,但接下來的查詢我跑空返回的數據。這兩個函數都在同一個php文件中,所以它不是一個錯誤的路徑錯誤。有什麼想法嗎?

工作腳本是

function get_login($username) 
{ 
    $pdo = connect_db(); 
    $stmt = $pdo->prepare('SELECT * from tblemployees where username = :username'); 
    $stmt->execute(['username' => $username]); 
    $user = $stmt->fetch(); 
    $stmt = null; 
    $pdo = null; 
    return $user; 
} 

非工作之一是

function get_events_for_calendar($userid) 
{ 
//Gets all userid rows 
    $pdo = connect_db(); 
    $sql = "Select * from tblevents where (employeeId = :uid) order by eventId desc;"; 
    $stmt = $pdo->prepare($sql); 
    $stmt->bindvalue(':uid', $userid); 
    $result = $stmt->execute(); 
    $temp_array = array(); 
    $event_array = array(); 
//fetches records and puts in array 
    while ($record = $result->fetch()){ 
    $temp_array[] = array('id' => $record['eventId'], 'empolyeeid' => $record['employeeId'], 'rh' => $record['rh'], 'oh' => $record['oh'], 
     'inventory' => $record['inventory'], 'empapproved' => $record['empapproved'], 'mgrapproved' => $record['mgrapproved'], 
     'acctapproved' => $record['acctapproved'],); 
     $var_dump($temp_array); 
    } 

回波json_encode($ event_array); }

不工作的那個從用戶名和密碼的ini文件中獲得空值,但是獲取主變量的信息。

即使兩個查詢都在同一個php文件中,它仍未找到第二個查詢上的文件。是否可能沒有關閉ini文件,這是錯誤的原因。在parse_ini之後,我找不到任何有關關閉的信息。任何想法爲什麼它不會找到它。

+0

嗯找到PDO的詳細信息,以及什麼是你的工作的登錄腳本,什麼是返回null「下查詢」?不能真正告訴你目前提供什麼。 – TimBrownlaw

+0

看起來你正試圖在每個查詢之前建立一個新的PDO連接,這將成爲anice問題。那是我第一次猜測是什麼造成的。你應該讓你的數據庫連接變量singleton – kunruh

+0

就像我說的,我是新來的PHP,但我會研究。 – Mike

回答

0
  • 當前問題是,你正在使用的路徑是相對於當前腳本,因此並不總是指向同一個地方。
  • 您的問題是錯誤的錯誤報告。一旦設置正確,它會告訴你所有的錯誤,包括你正在使用的錯誤路徑。
  • 你的額外問題是每次調用connect_db都會連接。
  • 另一個問題是你不設置連接字符集,這是非常重要的。

下面您可以找到編輯後的版本。它只連接一次,它正在使用腳本的絕對路徑。你也不會編輯路徑。正確的字符集也被設置 有關錯誤報告的信息,您可以在鏈接的問題中找到。
你可以在我的PDO tutorial

function connect_db() 
{ 
    static $pdo; 
    if (!$pdo) 
    { 
     $ini = parse_ini_file($_SERVER['DOCUMENT_ROOT']."path/from/root/atmc_timesheet_config.ini", TRUE); 

     $dbhost = 'localhost'; 
     $dbcharset = 'utf8'; 
     $db_name = $ini['database']['db_name']; 
     $user_name = $ini['database']['db_user']; 
     $pass = $ini['database']['db_pass']; 

     $dsn = "mysql:dbname=$db_name;host=$dbhost;charset=$dbcharest"; 
     $pdo = new PDO($dsn, $user_name, $pass); 
     $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    } 
    return $pdo; 
} 
+0

這個答案適合我。您關於唯一正確的pdo教程的頁面實際上是我開始編寫此項目時閱讀的第一篇。這對我來說只是一個新來的。NET環境,因爲php在數據庫方面似乎需要一種新的思維方式。我感謝所有幫助我設定正確的道路。 – Mike