MySQL查询在完整性约束违规时失败

时间:2009-03-09 02:00:54

标签: mysql pdo

此查询与

一起失败
  

完整性约束违规:1048列'login_name'不能为空

我的插入声明是......

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

我的数据库类可以找到at another questionprint_r()告诉我数组肯定有值。

可能与我使用“密码”一词有关,这也是一个MySQL函数吗?

PDO是否支持使用INSERT的预处理语句,其方式与SELECT相同?

我是否需要引用值,例如':login_name'?

1 个答案:

答案 0 :(得分:1)

PDO::query不支持预处理语句语法吗?给PDO::preparePDOStatement::execute一个读数。你可能想要这样的东西:

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

您也可以调用$stmt->bindValue()而不是构建绑定数组。我认为明确绑定每个值是更好的,因为你可以在那里验证类型。

编辑:对不起jcinacio,在我发布之前,我没有看到你的评论几乎完全相同。