繁体   English   中英

我为什么不能(或如何)使用WordPress API将NULL值插入我的MySQL数据库中

[英]Why can't I — or how do I — insert NULL values into my MySQL database using the WordPress API

我已经为此工作了好几个小时,无法弄清楚如何为列插入/更新NULL值。 例如,我有一段代码

    case 'add':
    {
        $message = $wpdb->insert('projs', array('compname' => $compname, 'projname' => $projname, 'imageurl' => $imageurl, 'sumsmall' => $sumsmall, 'sumfull' => $sumfull, 'results' => $results, 'caseid' => $caseid, 'hide' => $hide)) 
                    ? 'Successfully added project to the database.'
                    : 'Error occurred when trying to add project to database: ' . $wpdb->last_error;
        break;
    }

并且只要在$caseid等于null情况下执行它(在PHP领域),查询就会失败,并显示wpdb->last_error

无法添加或更新子行:外键约束失败('my_table_name','projs',CONSTRAINT'projs_ibfk_1'FOREIGN KEY('caseid')参考'cases'('id')ON DELETE SET NULL

作为参考,表projs和case是在安装过程中使用以下命令创建的

// Add table to hold the project portfolio
if ($wpdb->get_var("SHOW TABLES LIKE 'projs'") != 'projs')
{
    $wpdb->query("CREATE TABLE projs (id MEDIUMINT NOT NULL AUTO_INCREMENT PRIMARY KEY, compname VARCHAR (200), projname VARCHAR (200), imageurl VARCHAR(300), sumsmall VARCHAR (250), sumfull VARCHAR (5000), results VARCHAR (5000), postdate DATETIME DEFAULT CURRENT_TIMESTAMP, caseid MEDIUM INT, FOREIGN KEY (caseid) REFERENCES cases(id) ON DELETE SET NULL) $charset_collate");
}
// Add table to hold the case studies
if ($wpdb->get_var("SHOW TABLES LIKE 'cases'") != 'cases')
{
    $wpdb->query("CREATE TABLE cases (id MEDIUMINT NOT NULL AUTO_INCREMENT PRIMARY KEY, compname VARCHAR (200), casename VARCHAR (200), imageurl VARCHAR(300), summary VARCHAR (5000), results VARCHAR (5000), postdate DATETIME DEFAULT CURRENT_TIMESTAMP) $charset_collate");
}

而且我看不到在projscaseid插入NULL值如何违反任何规定。

MySQL的CURRENT_TIMESTAMP函数希望在TIMESTAMP数据类型上调用,而不是DATETIME

请注意,如果表是InnoDB,则ON DELETE SET NULL将导致问题。

CREATE TABLE projs (
id MEDIUMINT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
compname VARCHAR (200), 
projname VARCHAR (200), 
imageurl VARCHAR(300), 
sumsmall VARCHAR (250), 
sumfull VARCHAR (5000), 
results VARCHAR (5000), 
postdate TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 
caseid MEDIUMINT, 
FOREIGN KEY (caseid) REFERENCES cases(id) ON DELETE SET NULL
);

这并不是说通常不会让您插入NULL值。 特别是不允许您在caseid插入NULL值。

由于链接的外键约束的caseididcases ,它期待等于其中的一个值id秒。

NULL值插入其他任何列中都应该没有问题(当然, id除外)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM