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