2009-03-09 10 views
1

이 쿼리에 실패 유지MySQL의 쿼리는 무결성 제약 조건 위반에 실패

무결성 제약 조건 위반 : 1,048 열 'login_name은'...

내 삽입 문은 NULL 일 수 없습니다

$insertUserQuery = 'INSERT INTO `users` (
        `login_name`, 
        `password`, 
        `first_name`, 
        `last_name`, 
        `company_name`, 
        `company_address`, 
        `country`, 
        `email`, 
        `phone_number`, 
        `agency_type`, 
        `sold_before`, 
        `authorised`, 
        `current_module` 
        ) 
        VALUES (
        :login_name, :login_password, :first_name, :last_name, :company_name, :company_address, :country, :email, :phone_number, :agency_type, :sold_before, 0, 0);'; 

    $bindings = array(':login_name'  => $loginName, 
         ':login_password' => sha1($password . Config::PASSWORD_SALT), 
         ':first_name'  => $firstName, 
         ':last_name'  => $lastName, 
         ':company_name' => $companyName, 
         ':company_address' => $companyAddress, 
         ':country'   => $country, 
         ':email'   => $emailAddress, 
         ':phone_number'  => $phone, 
         ':agency_type'  => null, 
         ':sold_before' => null 
        ); 

print_r($bindings);     

    Db::query($insertUserQuery, $bindings); 

데이터베이스 클래스는 at another question입니다. print_r()은 배열에 확실히 값이 있음을 알려줍니다.

MySQL 함수이기도 한 '암호'라는 단어를 사용하여 저와 관련이 있습니다.

PDO는 SELECT와 동일한 방식으로 준비된 명령문을 INSERT로 지원합니까?

': login_name'과 같은 값을 인용해야합니까?

+0

$ loginName이 (가) null이 아닌지 확실합니까? DB 래퍼 클래스로 디버깅 해 보셨습니까? (그래도 괜찮아 보인다.) –

+0

예, 모든 바인딩 데이터를 echo'd했고 올바르게 나오고 있습니다. – alex

+0

쿼리에 바인딩이 없습니다. –

답변

1

PDO::query은 준비된 구문 구문을 지원하지 않습니까? PDO::preparePDOStatement::execute을 읽으십시오. 당신은 대신 바인딩의 배열을 구축 $stmt->bindValue()를 호출 할 수 있습니다

$insertUserQuery = 'INSERT INTO `users` (`login_name`, ...) ' . 
    'VALUES (:login_name, ...);'; 
$bindings = array(':login_name' => $loginName, ...); 
$stmt = Db::prepare($insertUserQuery); 
$stmt->execute($bindings); 

: 당신은 아마 뭔가를 원한다. 각 유형의 값을 명시 적으로 바인딩 할 수 있기 때문에 각 값을 명시 적으로 바인딩하는 것이 조금 더 좋다고 생각합니다.

편집 : 죄송합니다 jcinacio, 귀하의 의견은 내가 게시 한 후까지 거의 동일하다는 것을 알 수 없습니다.

+0

나는 PDO에 더 많은 추상화를 가하고 있기 때문에 (필자는 추상화 된 MySQL 특정 명령을 추측한다) 내 싱글 톤 패턴을 버리는 것이 나을 것이라고 생각한다. 귀하의 답변에 감사드립니다. – alex