コードを読む:
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 authorized
set authorized
= :authorized where authorized_id
= :identity_id;
確か:authorized
にSQLステートメントに明示的に設定または含まれていないことを認識しています。
これにより、次の 2 つの結論が導き出されます。
この環境で列を NULL にすることはできませんが、同じコードが開発システム (PC) で正常に動作する場合、これら 2 つのシステムでデータベース スキームが異なる可能性があります。
新しい環境ではauthorized
、表の列authorized
が定義されていますが、開発環境でNOT NULL
はこの制約はありません。
両方のシステムを比較SHOW CREATE TABLE authorized
して、これが正しいかどうかを確認してください。
の列値authorized
は配列から来ている$_POST
ので..何らかの理由でブラウザによって投稿されていない可能性はありますか? ただし、コードでその理由を見つけることはできません。