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 行是第二$affected_rows = $statment->execute($data);行。

我正在释放语句,两个准备好的语句的语法似乎相同。

我在这里做错了什么?

4

1 回答 1

1

那是因为您得到的是 MDB2_ERROR 对象而不是语句对象。您prepare()显然没有工作,并且您根本没有检查是否成功prepare()来了解这一点。

另外,我不确定您的第一个是如何工作的,因为您将prepare结果设置为$resvariable 而不是$statment. 我还注意到您的变量名称$statment没有e(不确定这是否是一个错字)。

于 2013-01-08T00:44:17.637 回答