【发布时间】:2009-03-09 02:00:54
【问题描述】:
这个查询一直失败
违反完整性约束: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 是否以与使用 SELECT 相同的方式支持使用 INSERT 准备好的语句?
我是否需要在值周围加上引号,例如 ':login_name'?
【问题讨论】:
-
您确定 $loginName 不为空吗?您是否尝试过调试数据库包装类? (虽然看起来还可以)
-
是的,我已经回显了所有绑定数据,并且输出正确。
-
请尝试以下方法,而不是使用 DB::query() 函数:$statement = DB::getInstance()->prepare($insertUserQuery); $statement->execute($bindings);另外,您可以尝试从执行()的绑定数组中的名称中删除冒号
-
@Itay Moav,绑定发生在静态类中。
-
我认为 DB 类存在缺陷——因为它使用的是 bindParam() 而不是 bindValue()。 bindParam 期望变量通过引用传递 - 它可能是一些奇怪行为的罪魁祸首......