0

私は問題を抱えており、何か助けていただければ幸いです。データベースと対話するためにphpアプリケーションを使用しています。完全に機能しているデータベースがあります。しかし、それをバックアップして別の PC に移動すると、動作し始めました。オリジナルと同じです。というテーブルがAuthorizeあり、デフォルトが null ではない列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()
4

1 に答える 1

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;";
    ...

そしてエラー:

エラー: 列 'authorized' を null にすることはできません
sql: update authorizedset authorized= :authorized where authorized_id= :identity_id;

確か:authorizedにSQLステートメントに明示的に設定または含まれていないことを認識しています。

これにより、次の 2 つの結論が導き出されます。

  1. この環境で列を NULL にすることはできませんが、同じコードが開発システム (PC) で正常に動作する場合、これら 2 つのシステムでデータベース スキームが異なる可能性があります。

    新しい環境ではauthorized、表の列authorizedが定義されていますが、開発環境でNOT NULLはこの制約はありません。

    両方のシステムを比較SHOW CREATE TABLE authorizedして、これが正しいかどうかを確認してください。

  2. の列値authorizedは配列から来ている$_POSTので..何らかの理由でブラウザによって投稿されていない可能性はありますか? ただし、コードでその理由を見つけることはできません。

于 2012-07-29T10:52:53.630 に答える