我遇到了问题,如果能得到帮助,我将非常乐意。我正在使用php应用程序与数据库进行交互。我有一个数据库,它运行正常。但是,当我备份它并将其移至另一台PC时,它开始起作用。它与原始相同。我有一个名为Authorize的表,一个列authorized的默认值不为null,但是当我尝试更新授权列时,出现以下消息(在原始系统上,它仍然可以正常工作,我似乎无法找到问题)。

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()

最佳答案

读取您的代码:

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:更新authorized设置authorized =:授权其中authorized_id =:identity_id;


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

这导致两个可能的结论:


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

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

比较两个系统中的SHOW CREATE TABLE authorized,以查看是否为真。
由于authorized的列值来自$_POST数组..是否有可能由于某种原因它没有被浏览器发布?但是,在您的代码中找不到原因。

关于mysql - MySQL数据库列约束错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11702585/

10-09 00:44