簡體   English   中英

MySQL新行沒有插入默認值

[英]Mysql new rows don't have default value inserted

ALTER TABLE  `songs`
CHANGE  `artist_name`  `artist_name` VARCHAR( 255 ) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL DEFAULT  'N/A'

^這是我的桌子,artist_name的默認值為'N / A'。 我正在使用表單提交數據。 但是,當我通過表單提交數據時,該行不包含“ N / A”,並且該值為空。 有人知道發生了什么嗎?

$video_id=$_POST['video_id'];
$song_name=$_POST['song_name'];
$artist_name=$_POST['artist_name'];
$movie_name=$_POST['movie_name'];
$language=$_POST['language'];
$oldornew=$_POST['oldornew'];

//inserting data order
$order = "INSERT INTO dhb_dhb.songs
        (video_id, song_name,artist_name, movie_name,language,oldornew)
        VALUES
        ('$video_id', '$song_name','$artist_name', '$movie_name', '$language', '$oldornew')";

如果特定的$_POST鍵為空,則必須取消設置,因此將插入NULL ,然后會自動為其分配默認值。 現在,您只是插入一個空白字符串,該字符串不會轉換為默認的列值,因為它不是NULL

編輯然后,最簡單的方法是使用關聯數組,該數組僅包含不為空的鍵/值:

$data = array('video_id' => $video_id);
foreach(array('artist_name', 'song_name') as $key)
    if(!empty($_POST[$key])){
        $data[$key] = mysql_real_escape_string($key);
    }
}

$columns = "`". implode("`, `", array_keys($data)) ."`";
$values = "'". implode("', '", array_values($data)) ."'";
$query = "INSERT INTO table ({$columns}) VALUES ({$values})";

這還沒有經過測試,值應該在插入之前進行測試(例如$song_id真的是整數嗎?),但這是一般的想法。

可以檢查任何用戶輸入是否已設置,如果未設置,則使用默認值NULL:

$variable = (!empty($_POST['variable'])) ? $_POST['variable'] : NULL;

現在,如果$_POST['variable']為空(或未設置),則在查詢中調用此方法將設置默認值。

我要注意 就像您在代碼示例中所做的那樣,每當您接受用戶輸入並將其直接放入數據庫查詢中時,就會打開一個嚴重的安全漏洞,稱為SQL Injection 考慮使用mysql_real_escape_string清理用戶輸入

編輯:

然后,可以通過使用以下代碼來應用您的代碼:

<?php

$data = array(
    'video_id',
    'song_name',
    'artist_name',
    'movie_name',
    'language',
    'oldornew',
);
$insert_ary = array();

foreach ($data as $val) {
    if (!empty($_POST[$val])) {
        $insert_ary[$val] = mysql_real_escape_string($_POST[$val]);
    }
}

$columns = implode(', ', array_keys($insert_ary));
$values = implode("', '", $insert_ary);
$sql = "INSERT INTO dhb_dhb.songs ($columns) VALUES('$values')";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM