[英]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");
}
而且我看不到在projs
为caseid
插入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
值。
由于链接的外键约束的caseid
的id
列cases
,它期待等于其中的一个值id
秒。
将NULL
值插入其他任何列中都应该没有问题(当然, id
除外)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.