2012-07-31 57 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