0

準備済みステートメントに MDB2 を使用しています。私は PEAR MDB2 サイトの名前ベースの例をガイドとして使用しています。

        $q = '
            UPDATE 
                abc_news 
            SET 
                newstitle       = :newstitle,  
                categoryid      = :categoryid,  
                facilityid      = :facilityid,  
                user_id_mod     = :user_id_mod,  
                user_id_add     = :user_id_add,  
                display         = :display,  
                locked          = :locked,  
                datemodified    = NOW()
            WHERE 
                newsid          = :newsid
        ';

        $types = array(
            'text', 
            'integer',
            'integer',
            'integer',
            'integer',
            'integer',
            'integer',
            'integer',
        );

        $res = $mdb2_dbx->prepare($q, $types,MDB2_PREPARE_MANIP);

        $data = array(
            'newstitle'     => $n_newstitle, 
            'categoryid'    => $n_categoryid, 
            'facilityid'    => $n_facilityid, 
            'display'       => 1, 
            'locked'        => 1, 
            'user_id_add'   => $n_user_id_add, 
            'user_id_mod'   => $n_user_id_mod, 
            'newsid'        => $newsid, 
        );
        $affected_rows = $statment->execute($data);
        if (PEAR::isError($res))
            die('error');
        $statement->free();


        $q = '
            UPDATE 
                abc_news_text 
            SET 
                newstext        = :newstext  
            WHERE 
                newsid          = :newsid
        ';

        $types = array(
            'text', 
            'integer',
        );

        $statment = $mdb2_dbx->prepare($q, $types,MDB2_PREPARE_MANIP);

        $data = array(
            'newstext'      => $n_newstext, 
            'newsid'        => $newsid, 
        );
        $affected_rows = $statment->execute($data);
        if (PEAR::isError($res))
            die('error');                   

        $statement->free();

最初のクエリは機能します - 自動インクリメントされた $newsid が画面に出力されます (新しい送信ごとに増加します)。

すぐ下に、次のエラーが表示されます。

Fatal error: Call to undefined method MDB2_Error::execute() in news.php on line 160

160 行目は 2$affected_rows = $statment->execute($data);行目です。

ステートメントを解放していますが、構文は両方の準備済みステートメントで同じように見えます。

ここで何が間違っていますか?

4

1 に答える 1

1

これは、ステートメント オブジェクトではなく MDB2_ERROR オブジェクトを取得しているためです。あなたprepare()は明らかにうまくいきませんでしたprepare()。これを知るために、の成功をまったくチェックしていません。

prepareまた、結果を$resの代わりに変数に設定したため、最初の動作がどのように機能するかわかりません$statment。また、変数名$statmentに no がないことにも気付きeました (これがタイプミスかどうかはわかりません)。

于 2013-01-08T00:44:17.637 に答える