La consulta MySQL falla al violar la restricción de integridad
Pregunta
Esta consulta sigue fallando con
Violación de la restricción de integridad: 1048 La columna 'login_name' no puede ser nula
Mi declaración de inserción es ...
$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);
Mi clase de base de datos se puede encontrar en otra pregunta . El print_r ()
me dice que la matriz definitivamente tiene un valor.
¿Puede tener algo que ver conmigo usando la palabra 'contraseña' que también es una función MySQL?
¿La DOP admite declaraciones preparadas con INSERT de la misma manera que lo hace con SELECT?
¿Debo citar los valores, por ejemplo, ': login_name'?
Solución
PDO :: query
no admite la sintaxis de sentencias preparadas, ¿verdad? Dé PDO :: prepare y PDOStatement :: execute una lectura. Probablemente quieras algo como:
$insertUserQuery = 'INSERT INTO `users` (`login_name`, ...) ' .
'VALUES (:login_name, ...);';
$bindings = array(':login_name' => $loginName, ...);
$stmt = Db::prepare($insertUserQuery);
$stmt->execute($bindings);
También puede llamar a $ stmt- > bindValue ()
en lugar de crear una matriz de enlaces. Creo que vincular explícitamente cada valor es un poco mejor ya que puedes verificar los tipos allí mismo.
EDIT: lo siento, jcinacio, no vi que tu comentario fue casi idéntico hasta después de que publiqué.