我在使用PDO工作时遇到了一些麻烦。我会解释,因为我提供的代码。我不期待一个答案,但我希望有人可以解释我做错了什么,以及正确的解决方案将如何工作。
我正在研究CMS并试图实现MVC模式,因此使用PDO。
以下是我的index.php文件中我们有PDO声明的部分:
<?php
include_once 'models/USER_mapper.php';
$USER_mapper = new USER_mapper( 'localhost', 'root', 'root', 'online_magazine' );
$user = new User();
$user->setIDUser("JohnnyBoy");
$USER_mapper->registerUser($user);
?>
在USER_mapper中我有一个connect函数,它在创建一个新的USER_mapper时调用,我还有registerUser()函数,它将一个User对象作为参数,它应该从User对象中插入数据库中的信息使用过的。
下面是registerUser()函数:
public function registerUser($userOBJ) {
try {
$q = $this->DBH->prepare ( "INSERT INTO online_magazine.USER_TABLE (id_user, permission) VALUES (:id_user, :permission)" );
$q->execute ( ( array ) $userOBJ );
$this->DBH->commit ();
echo "it works";
} catch ( Exception $e ) {
echo "it doesn't work";
echo $e->getMessage ();
}
}
我要插入的表有两列:ID_USER和PERMISSION。权限有一个默认值,这就是我只为ID_USER提供setter函数并将权限留空的原因。
我想要实现的是使用具有正确值的User对象将数据插入到表中,并将User对象传递给USER_mapper,这将恢复信息并将其放在相应的表中。
我希望我已经足够清楚地突出我的问题了。让我知道是否应该添加更多细节和地点。
EDIT1:我忘了提到当我使用上面的方法时,我得到一个php错误,看起来像这样:
[22-Nov-2013 03:18:08 Europe/Berlin] PHP Fatal error: Uncaught exception 'PDOException' with message 'There is no active transaction' in directory
EDIT2:我发现如何使用bindParam()执行此操作,如下所示:
$id_user = $userObject->getIDUser ();
$this->DBH->beginTransaction ();
$stmt = $this->DBH->prepare ( "INSERT INTO online_magazine.USER_TABLE (id_user) VALUES (:id_user)" );
$stmt->bindParam ( ':id_user', $id_user, PDO::PARAM_STR );
$stmt->execute ();
$this->DBH->commit ();
谢谢大家!!