php pdo成功但不要将数据输入数据库

时间:2013-12-21 19:44:04

标签: php sql oop pdo

我的PDO / SQL存在这个奇怪的问题。我使用命名空间和类来控制事物。

我使用自定义PDO类,因为我还定义了一些标准值,比如PDO应该抛出异常等等。

当我尝试创建用户时会出现奇怪的问题。我正处于这个项目的开发阶段,因此我正在硬编码测试登录。

try  
{  
$user = new OOP\User\user();  
$user->setFirstname("Firstname");  
$user->setLastname("Lastname");  
$user->setUsername("Test");  
$user->setSecret(OOP\utillityClass::create_unique_hash(128));  
$user->setPassword(OOP\utillityClass::create_password("*Duh as if im studpid enought to post my password*", $user->getSecret()));  
$user->setEmail("some mail");  
$birthday = new DateTime("1990-01-01");  
$user->setBirthday($birthday);  
$user->setClass(1);  
$user->setAdded(new DateTime());  
$user->setLast_Active(new DateTime());  
$user->setActivated(true);  
$user->setIp(OOP\utillityClass::getip());  
$user->setIv(OOP\Crypt\crypt::createIv("hex"));  
$permissions = array();  
$permissions['staff'] = array();  
$permissions['staff']['read'] = 1;  
$user->setPermissions(json_encode($permissions));  
$user->save();  
}  
catch (Exception $e)  
{  
echo "Error *censored, i use slurs while debugging*:" . PHP_EOL;  
print_r($e);  
}

以上是创作代码。

这是数据库中的表格:

CREATE TABLE IF NOT EXISTS `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `firstname` varchar(50) NOT NULL,
  `lastname` varchar(50) NOT NULL,
  `username` varchar(50) NOT NULL,
  `password` varchar(128) NOT NULL,
  `secret` varchar(128) NOT NULL,
  `email` varchar(255) NOT NULL,
  `birthday` date NOT NULL,
  `class` int(11) NOT NULL,
  `added` datetime NOT NULL,
  `last_active` datetime NOT NULL,
  `activated` tinyint(1) NOT NULL DEFAULT '0',
  `ip` varchar(40) NOT NULL,
  `iv` varchar(32) NOT NULL,
  `permissions` text NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

这里是插入代码(注意它是被调用的公共保存方法,但是save方法调用这个私有方法,因为没有用户加载,然后它创建它):

private function insert()
{

    // We need the $CONFIG variable for sending actiovation emails \\
    global $CONFIG;

    $q = $this->PDO->prepare("INSERT INTO `user` (`firstname`, `lastname`, `username`, `password`, `secret`, `email`, `birthday`, `class`, `added`, `last_active`, `activated`, `ip`, `iv`, `permissions`) VALUES (:firstname, :lastname, :username, :password, :secret, :email, :birthday, :class, :added, :last_active, :activated, :ip, :iv, :permissions);");


    $q->bindParam(':firstname', $this->firstname);
    $q->bindParam(':lastname', $this->lastname);
    $q->bindParam(':username', $this->username);
    $q->bindParam(':password', $this->password);
    $q->bindParam(':secret', $this->secret);
    $q->bindParam(':email', $this->email);
    $q->bindParam(':birthday', $this->birthday->format("Y-m-d"));
    $q->bindParam(':class', $this->class);
    $q->bindParam(':added', $this->added->format("Y-m-d H:i:s"));
    $q->bindParam(':last_active', $this->last_active->format("Y-m-d H:i:s"));
    $q->bindParam(':activated', $this->activated);
    $q->bindParam(':ip', $this->ip);
    $q->bindParam(':iv', $this->iv);
    $q->bindParam(':permissions', $this->permissions);

    $res = $q->execute();

    if ($q->errorCode() != 00000)
    {
        throw new \Exception("An error occured during the creation");
    }
    else
    {
        return true;
    }

}

现在有趣的是,根本没有Exception或PDOException,实际上它按原样传递,但它没有将数据输入数据库,但是自动增量数增加了1。

我真的希望有人可以帮助我解决这个问题,因为我一直试图让这一天工作,我试图删除并重新创建数据库和表格,包括插入代码。

事先,非常感谢您的时间和帮助。

1 个答案:

答案 0 :(得分:0)

尝试查看errorInfo函数的返回值,如var_dump($q->errorInfo());。如果您在执行查询时遇到失败,就会在DBMS的实际客户端工具(即MySQL Workbench)中执行该查询时,这会给出错误消息。