此查询与
一起失败完整性约束违规: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 question。 print_r()
告诉我数组肯定有值。
可能与我使用“密码”一词有关,这也是一个MySQL函数吗?
PDO是否支持使用INSERT的预处理语句,其方式与SELECT相同?
我是否需要引用值,例如':login_name'?
答案 0 :(得分:1)
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()
而不是构建绑定数组。我认为明确绑定每个值是更好的,因为你可以在那里验证类型。