代码之家  ›  专栏  ›  技术社区  ›  alex

MySQL查询因完整性约束冲突而失败

  •  1
  • alex  · 技术社区  · 16 年前

    此查询一直失败,原因是

    我的插入语句是。。。

        $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 question . 这个 print_r()

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

    PDO是否以与SELECT相同的方式支持带有INSERT的预处理语句?

    我是否需要在值周围引用,例如“:login_name”?

    1 回复  |  直到 8 年前
        1
  •  1
  •   D.Shawley    16 年前

    PDO::query 不支持预处理语句语法,是吗?给 PDO::prepare PDOStatement::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,直到我发布之后,我才发现你的评论几乎完全相同。