Mysql数据库列约束错误

时间:2012-07-28 16:08:25

标签: mysql

我遇到了问题,如果能得到一些帮助,我真的很想要。我正在使用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()

1 个答案:

答案 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 set authorized =:授权authorized_id =:identity_id;

我意识到确实:authorized没有明确地设置或包含在SQL语句中。

这导致两个可能的结论:

  1. 如果在此环境中该列不能为NULL,但相同的代码在您的开发系统(您的PC)上运行正常,那么这两个系统上的数据库方案可能会有所不同。

    在新环境中,表authorized中的authorized列定义为NOT NULL,而在您的开发环境中,您没有此约束。

    比较两个系统中的SHOW CREATE TABLE authorized,看看是否属实。

  2. 因为authorized的列值来自$_POST数组..是否可能由于某种原因它不会被浏览器发布?但是,在您的代码中无法找到原因。