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'?

¿Fue útil?

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é.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top