我遇到了问题,如果能得到一些帮助,我真的很想要。我正在使用php应用程序与数据库进行交互。我有一个数据库,它工作得很好。然而,当我备份并将其移动到另一台PC时,它开始起作用。它与原版完全相同。我有一个名为Authorize
的表,以及一个默认不为空的列authorized
,但是当我尝试更新授权列后,出现以下消息(在原始系统上它仍然正常,我似乎无法找到问题)。
Error: Column 'authorized' cannot be null
sql: update `authorized` set `authorized` = :authorized where `authorized_id` = :identity_id;
arr_sql_param: Array
(
[:identity_id] => 22
[:authorized] =>
)
Sent From: update_grid()
答案 0 :(得分:1)
阅读你的代码:
public function sql_update() {
...
// make sql statement from key and values in $_POST data
foreach($_POST as $key => $val) {
$sql_set .= "`$key` = :$key, ";
$sql_param[":$key"] = $this->cast_value($val, $key);
...
// posted values are saved here for pdo execute
$sql_param = array();
$sql_param[':identity_id'] = $identity_id;
...
$sql_final = "update `$this->table` set $sql_set where `$this->identity_name` = :identity_id;";
...
错误:
错误:“授权”列不能为空 sql:update
authorized
setauthorized
=:授权authorized_id
=:identity_id;
我意识到确实:authorized
没有明确地设置或包含在SQL语句中。
这导致两个可能的结论:
如果在此环境中该列不能为NULL,但相同的代码在您的开发系统(您的PC)上运行正常,那么这两个系统上的数据库方案可能会有所不同。
在新环境中,表authorized
中的authorized
列定义为NOT NULL
,而在您的开发环境中,您没有此约束。
比较两个系统中的SHOW CREATE TABLE authorized
,看看是否属实。
因为authorized
的列值来自$_POST
数组..是否可能由于某种原因它不会被浏览器发布?但是,在您的代码中无法找到原因。