在一页上有两个准备好的陈述 - 第一个工作,第二个失败

时间:2013-01-08 00:39:38

标签: mysql prepared-statement mdb2

我正在使用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);行。

我正在释放语句,两个预处理语句的语法似乎相同。

我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

这是因为您获取的是MDB2_ERROR对象而不是语句对象。您的prepare()显然无法正常工作,而您根本不会检查prepare()是否成功。

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