对于准备好的语句,我使用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);
行。
我正在释放语句,两个准备好的语句的语法似乎是相同的。
我在这里做错了什么?
这是因为您得到的是MDB2_ERROR对象而不是语句对象。你的prepare()
显然没有工作,你根本没有检查prepare()
是否成功来知道这一点。
另外,我不确定您的第一个是如何工作的,因为您将prepare
结果设置为$res
变量而不是$statment
。我还注意到您的变量名称$statment
没有e
(不确定这是否是打字错误)。