簡體   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