문제

이 쿼리는 계속 실패합니다

무결성 제약 조건 위반 : 1048 열 '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);

내 데이터베이스 클래스를 찾을 수 있습니다 또 다른 질문에서. 그만큼 print_r() 배열에 확실히 값이 있다고 말합니다.

MySQL 기능이기도 한 '비밀번호'라는 단어를 사용하여 나와 관련이 있습니까?

PDO는 SELECT와 동일한 방식으로 인서트를 사용하여 준비 된 진술을 지원합니까?

값에 대해 인용해야합니까, 예 ': login_name'?

도움이 되었습니까?

해결책

PDO::query 준비된 명령문 구문을 지원하지 않습니까? 주다 PDO :: 준비 그리고 pdostatement :: 실행 읽기. 당신은 아마도 다음과 같은 것을 원할 것입니다.

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

당신은 또한 전화 할 수 있습니다 $stmt->bindValue() 바인딩 배열을 구축하는 대신. 나는 당신이 바로 유형을 확인할 수 있기 때문에 각 값을 명시 적으로 바인딩하는 것이 조금 더 좋다고 생각합니다.

편집 : 죄송합니다 jcinacio, 게시 후까지 귀하의 의견이 거의 동일하다는 것을 알지 못했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top