La requête MySQL échoue lors d'une violation de contrainte d'intégrité

StackOverflow https://stackoverflow.com/questions/624774

  •  05-07-2019
  •  | 
  •  

Question

Cette requête continue à échouer avec

  

Violation de contrainte d'intégrité: 1048 La colonne 'login_name' ne peut pas être null

Ma déclaration d'insertion est ...

    $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);

On peut trouver ma classe de base de données à une autre question . Le print_r () me dit que le tableau a vraiment une valeur.

Est-ce que cela a quelque chose à voir avec moi en utilisant le mot 'mot de passe' qui est aussi une fonction de MySQL?

PDO prend-il en charge les instructions préparées avec INSERT de la même manière qu'avec SELECT?

Dois-je citer les valeurs, exemple ': login_name'?

Était-ce utile?

La solution

PDO :: query ne supporte pas la syntaxe d'instruction préparée, n'est-ce pas? Donnez PDO :: prepare et PDOStatement :: execute une lecture. Vous voulez probablement quelque chose comme:

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

Vous pouvez également appeler $ stmt- & bind> valeur () au lieu de créer un tableau de liaisons. Je pense que lier explicitement chaque valeur est un peu plus agréable puisque vous pouvez vérifier les types ici.

EDIT: désolé jcinacio, je n’avais pas vu que votre commentaire était presque identique jusqu’à ce que je poste.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top