-1

PDOコードをからに変換しようとしていますがmysql_query、この関数から始めます

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();
}

パラメータを間違ってバインドしているためかどうかはわかりませんが、サーバーエラーページが表示されただけです

「サーバーエラー。Webサイトで取得中にエラーが発生しました.......」

前もって感謝します

4

2 に答える 2

2

例外をキャッチする前に、例外を生成するようにPDO エラー モードを設定する必要があります。

あなたのconnect.php

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

次に、接続ファイルと同様の try/catch ステートメントを関数に含め、それを使用して開発環境でエラーを表示できます。

于 2012-07-31T15:35:38.430 に答える
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);
于 2012-07-31T15:39:46.133 に答える