为什么我无法使用WordPress API将NULL值插入到我的MySQL数据库中,或者如何做到这一点?

20 浏览
0 Comments

为什么我无法使用WordPress API将NULL值插入到我的MySQL数据库中,或者如何做到这一点?

我已经花了几个小时在这上面,但是无法弄清楚如何在列中插入/更新NULL值。例如,我有一段代码:\n

    case 'add':
    {
        $message = $wpdb->insert('projs', array('compname' => $compname, 'projname' => $projname, 'imageurl' => $imageurl, 'sumsmall' => $sumsmall, 'sumfull' => $sumfull, 'results' => $results, 'caseid' => $caseid, 'hide' => $hide)) 
                    ? '成功将项目添加到数据库。'
                    : '尝试将项目添加到数据库时出错:' . $wpdb->last_error;
        break;
    }

\n每当使用$caseid等于null(在PHP中)执行时,查询都会失败,并显示wpdb->last_error:\n

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

\n参考资料,projs和cases表在安装过程中创建,代码如下:\n

// 添加用于保存项目组合的表
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");
}
// 添加用于保存案例研究的表
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");
}

\n我看不出在projs表中插入caseidNULL值会违反任何规定。

0
0 Comments

为什么我无法使用WordPress API将NULL值插入到MySQL数据库中,或者如何解决这个问题?

在上述内容中,出现了无法使用WordPress API将NULL值插入到MySQL数据库中的问题。这个问题的原因是MySQL的CURRENT_TIMESTAMP函数期望在TIMESTAMP数据类型上调用,而不是DATETIME数据类型。

解决这个问题的方法是将数据库表的定义中的postdate字段的数据类型从TIMESTAMP改为DATETIME。修改后的表定义如下所示:

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 NULL, 
caseid MEDIUMINT, 
FOREIGN KEY (caseid) REFERENCES cases(id) ON DELETE SET NULL
);

请注意,如果表是InnoDB引擎,使用ON DELETE SET NULL会导致问题。

因此,以上是解决无法使用WordPress API将NULL值插入到MySQL数据库中的问题的原因和解决方法。请根据需要修改数据库表的定义,并将postdate字段的数据类型改为DATETIME。

0
0 Comments

在使用WordPress API向MySQL数据库插入NULL值时,为什么我无法插入NULL值,或者如何解决这个问题?

问题出现的原因是由于外键约束将caseid与cases表中的id列关联起来,因此它期望caseid的值等于那些id值之一。对于除了id列之外的任何其他列,插入NULL值应该没有问题。

那么外键不可以为空吗?如果我希望一张表中的某一列可能与另一张表中的某一列关联,但不一定关联,该怎么办呢?对于我的应用程序来说,projs表的某些行与cases表的行相关联,但不一定必须关联。

我相信,您可以通过在创建表时明确将该列定义为可为空来允许外键为空(例如:caseid MEDIUM INT NULL)。

这里有一个关于这个问题的好问题和答案:stackoverflow.com/questions/2366854/…

0