我正在使用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);
行。
我正在释放语句,两个预处理语句的语法似乎相同。
我在这里做错了什么?
答案 0 :(得分:1)
这是因为您获取的是MDB2_ERROR对象而不是语句对象。您的prepare()
显然无法正常工作,而您根本不会检查prepare()
是否成功。
此外,由于您将prepare
结果设置为$res
变量而不是$statment
,因此我不确定您的第一个是如何工作的。我还注意到您的变量名称$statment
没有e
(不确定这是否是拼写错误)。