2012-07-31 56 views
-1

我想我的代碼從mysql_query轉換爲PDO,並使用此功能PDO綁定帕拉姆麻煩

function label_for_field($field_name, $table_name) { 
     $table = array(); 
     // Bind variables to parameters 
     $param_array = array(':bundle' => $table_name, ':field_name' => $field_name); 
     // Prepare Query Statement 
     $query = "SELECT data FROM field_config_instance WHERE bundle = :bundle AND field_name = :field_name"; 
     $STH = $DBH -> prepare($query); 
     // Execute 
     $STH -> execute($param_array); 

     // Set the fetch mode 
     $STH -> setFetchMode(PDO::FETCH_OBJ); 
     while ($row = $STH -> fetch()) { 
      $info = unserialize($row -> data); 
      $table[] = $info['label']; 
     } 
     return $table[0]; 
    } 

開始,我嘗試只是輸出它,看它是否工作

include_once ("includes/connect.php"); 
include ("includes/functions.php"); 

echo label_for_field("field_account_number", "account_table"); 

而這裏的connect.php

// Include Constants 
require_once ("constants.php"); 

//Establish Connection 
try { 
    $DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass); 
} 
catch (PDOException $e) { 
    echo $e -> getMessage(); 
} 

我不知道這是否是因爲我綁定的參數錯了,它只是給了我一個服務器錯誤頁面

「服務器錯誤。而檢索......」

在此先感謝

+0

錯誤是什麼? – feeela 2012-07-31 15:39:20

+0

@feeela我剛剛編輯了問題並添加了有關錯誤的其他信息 – lusketeer 2012-07-31 15:45:49

+0

不,您沒有。參考你的服務器'error.log'來查看實際的錯誤... – feeela 2012-07-31 16:10:17

回答

1

試試這個,看看你是否從查詢返回有效的對象。

// Prepare Query Statement 
    $query = "SELECT data FROM field_config_instance WHERE bundle = :bundle AND field_name = :field_name"; 
    $STH = $DBH -> prepare($query); 
    $STH->bindValue(":bundle", $table_name); 
    $STH->bindValue(":field_name", $field_name); 
    $STH->execute(); 
    $STH->setFetchMode (PDO::FETCH_OBJ); 

    $result = $STH->fetchAll(); 

    var_dump($result); 
+0

它以這種方式工作,但我不明白爲什麼我不能像我在原始數組中使用陣列中所述的 – lusketeer 2012-07-31 15:45:12

+0

@ user1301840那樣,只需在execute和var_dump結果後添加一個fetchall即可。你得到了那麼遠的結果嗎? – Ray 2012-07-31 16:00:32

+0

我做了你說的,它的工作原理。但是當我把它作爲一個函數使用時,它只是不起作用 – lusketeer 2012-07-31 16:17:03

2

您需要設置PDO error mode產生異常,然後才能趕上他們的網站遇到錯誤

在你connect.php

try { 
    $DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass); 
    $DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} 

然後你就可以有一個類似的try/catch語句在你的函數,你的連接文件中,並用它來顯示錯誤在你的開發環境。

+0

我把它放在那裏,但它不會改變任何東西 – lusketeer 2012-07-31 15:46:14

+0

它不會自行改變;你也需要一個類似的try/catch來運行查詢。但是,如果查詢實際產生異常,那隻會顯示一條錯誤消息。有可能是您的服務器錯誤問題的另一個原因。 – bcmcfc 2012-07-31 16:00:27