Mysql新行没有插入默认值

时间:2012-02-15 18:46:36

标签: php mysql

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')";

2 个答案:

答案 0 :(得分:2)

如果特定$_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是否真的是一个整数?)但这是一般的想法。

答案 1 :(得分:1)

可以检查任何用户输入是否已设置,如果没有,则使用默认值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')";