2013-12-21 14 views
0

저는 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 씩 증가합니다.

하루 종일이 작업을하기 위해 노력한 이후 누군가가 나를 도와 줄 수 있기를 바랍니다. 삽입 코드를 포함하여 데이터베이스와 테이블을 삭제하고 다시 만들려고했습니다.

미리 시간을내어 도와 주셔서 감사합니다.

+0

어리석은 질문이지만 모든 클래스 변수가 설정 되었습니까? – andrewsi

+0

이'$ user = new OOP \ User \ user();'는 윙크가 잘못 해석 될 수도 있습니다. 'User'와'user'하지만 그것은 저뿐입니다. '앤드류시 '가 언급 한 것을 들여다보십시오. –

+0

$ this-> PDO-> setAttribute (PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION)로 통화의 오류 모드를 설정해보십시오. 그런 다음 오류 코드를 보는 대신 try catch 블록에서 전체 쿼리 실행을 마무리하십시오. 또한 트랜잭션에있는 경우 변경 사항을 커밋해야합니다. – x20mar

답변

0

var_dump($q->errorInfo());과 같은 errorInfo 함수의 반환 값을 확인해보십시오. DBMS의 실제 클라이언트 도구 (예 : MySQL Workbench)에서 쿼리를 실행 한 것과 같은 쿼리를 실제로 실행하지 못하면 오류 메시지가 표시됩니다.

+0

어레이 (3) { [0] => 끈 (5)은 "00000" [1] => NULL [2] => NULL } 여전히 데이터 없음 테이블에 NOT NULL 제약 조건이나 권한 문제가 있습니다.내가 할 수있는 유일한 방법은 모든 변수를 var_dump하고 모든 변수에 해당하는 실제 삽입을 DBMS의 클라이언트 도구에 적용하는 것입니다. PHP 스크립트에서 사용한 것과 동일한 자격 증명을 사용해야합니다. 그러나 나는 DBMS가 클라이언트에게 그 오류를 알려주기 때문에 그것이 이상 할 것이라고 생각한다. –

+0

넌지라도 데이터베이스 –

+0

그게 원인 일 수 있다고 들리지만, 시도해 보겠습니다. 그 결과로 돌아올거야. –

관련 문제