La query MySQL non riesce in caso di violazione del vincolo di integrità
Domanda
Questa query continua a fallire con
Violazione del vincolo di integrità: 1048 La colonna 'login_name' non può essere nulla
La mia dichiarazione di inserimento è ...
$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);
La mia classe di database può essere trovata ad un'altra domanda . print_r ()
mi dice che l'array ha sicuramente un valore.
Potrebbe avere qualcosa a che fare con me usando la parola 'password' che è anche una funzione MySQL?
PDO supporta le istruzioni preparate con INSERT allo stesso modo di SELECT?
Devo citare i valori, ad esempio ': login_name'?
Soluzione
PDO :: query
non supporta la sintassi delle istruzioni preparate, vero? Dai PDO :: prepar e PDOStatement :: esegui una lettura. Probabilmente vuoi qualcosa del tipo:
$insertUserQuery = 'INSERT INTO `users` (`login_name`, ...) ' .
'VALUES (:login_name, ...);';
$bindings = array(':login_name' => $loginName, ...);
$stmt = Db::prepare($insertUserQuery);
$stmt->execute($bindings);
Puoi anche chiamare $ stmt- > bindValue ()
invece di creare un array di bind. Penso che associare esplicitamente ogni valore sia un po 'più bello poiché puoi verificare i tipi proprio lì.
EDIT: scusa jcinacio, non ho visto che il tuo commento era quasi identico fino a quando non l'ho pubblicato.