我遇到了问题,如果能得到帮助,我将非常乐意。我正在使用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/