La requête MySQL échoue lors d'une violation de contrainte d'intégrité
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'?
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.