저는 PDO/SQL에 이상한 문제가 있습니다. 나는 네임 스페이스와 클래스를 사용하여 일을 제어합니다.PHP는 성공했지만 데이터베이스에 데이터를 입력하지 마십시오
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;
그리고 여기에 (그것이라고 저장 방법 대중이 있습니다,하지만이 때문에 메서드 호출이 개인 방법을 저장하지 삽입 코드를 제공 사용자로드, 그것은)를 작성
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;
}
}
을 지금 여기에서 재미있는 일이 온다, 거기에는 예외가 없다거나 PDOException의 모든, 실제로는 예상대로 통과하지만 데이터베이스에 데이터를 입력하지 않지만, 자동 증가 숫자가 1 씩 증가합니다.
하루 종일이 작업을하기 위해 노력한 이후 누군가가 나를 도와 줄 수 있기를 바랍니다. 삽입 코드를 포함하여 데이터베이스와 테이블을 삭제하고 다시 만들려고했습니다.
미리 시간을내어 도와 주셔서 감사합니다.
어리석은 질문이지만 모든 클래스 변수가 설정 되었습니까? – andrewsi
이'$ user = new OOP \ User \ user();'는 윙크가 잘못 해석 될 수도 있습니다. 'User'와'user'하지만 그것은 저뿐입니다. '앤드류시 '가 언급 한 것을 들여다보십시오. –
$ this-> PDO-> setAttribute (PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION)로 통화의 오류 모드를 설정해보십시오. 그런 다음 오류 코드를 보는 대신 try catch 블록에서 전체 쿼리 실행을 마무리하십시오. 또한 트랜잭션에있는 경우 변경 사항을 커밋해야합니다. – x20mar