php post 多个空值 insert mysql
2014-02-24 来自:kingforever 5 人回应

如果post传过来的值有一些是空值 这个时候 可以通过isset去判断传过来的值是否非空,在写语句的时候可以判断,如一张表中 name type type2 type3 time 这5个字段 type2的值为空
那么通常用isset去判断 可以这样写 if(isset(type2)){
insert into mytable (name,type,type2,type3,time) VALUES('{$name}','{$type}','{$type2}','{$type3}',now()
}esle{
insert into mytable (name,type,type3,time) VALUES('{$name}','{$type}','{$type3}',now()
}

通过上面的方法去写入数据库,现在的问题是 如果上面的表中 不仅仅是 type2 的值为空 type3的值也为空 甚至还有type4也为空 这样该如何处理。(上面所说的这些值在实际情况下确实需要为空)我是个初学者 目前没有学习到oop 请用面向过程的方法解答 谢谢!

2014-02-26 来自:魔头小白兔

用foreach遍历检查每个参数是否isset并拼接sql,这是最简单的方法。

2014-02-26 来自:timmy

参数空传null就可以了.

if(! isset(type2)) $type2 = 'NULL';

最后拼sql, 如果type2为空, sql就是

insert into mytable (name,type,type2,type3,time) VALUES('name-value','type-value',NULL ,'type3-value',now()

更新

相比拼sql, 用prepared statement更好, 1) sql只编译一次, 2) 防sql注入.

代码也更简洁. sql用的是一样的, php会负责处理空值的情况, 示例如下:

<?php
# 示例表: yanse (id, sexi_id, name)
# 这里我们故意在$_POST里把 name字段 为空
$_POST = array(
'id' => 10000,
'sexi_id' => 100000
);

$dbh = new PDO('mysql:host=localhost;dbname=test1','brayden','');
$stmt = $dbh->prepare('insert into yanse (id, sexi_id, name)
values (:id, :sexi_id, :name)');
$stmt->bindParam(':id', $_POST['id']);
$stmt->bindParam(':sexi_id', $_POST['sexi_id']);
$stmt->bindParam(':name', $_POST['name']); #php会负责处理空值的情况, name字段为NULL

$stmt->execute();

$dbh = null;
?>
结果:
mysql> select * from yanse;
+-------+---------+---------------+
| id | sexi_id | name |
+-------+---------+---------------+
| 10000 | 100000 | NULL |
+-------+---------+---------------+
1 rows in set (0.00 sec)
2014-02-25 来自:飞儿
<?php

function sql_escape($input, $field_values, $fields) {
$str_field = '';
$str_value = '';
$comma = ',';
foreach($fields as $field) {
if(isset($input[$field])) {
$str_field .= $field . $comma;
$str_value .= "'" . mysql_escape_string($input[$field]) . "'" . $comma;
} else if(isset($field_values[$field])) {
$str_field .= $field . $comma;
$str_value .= $field_values[$field] . $comma;
}

}
return sprintf("(%s) values (%s)", trim($str_field, $comma), trim($str_value, $comma));
}

// 指定的字段值, 可以不用考虑sql过滤
$field_values = array(
'name' => "'name'",
'time' => 'now()',
);

// post提交来的值
$_POST = array(
'type1' => 'type1',
'type2' => '',
);

echo 'insert into mytable ' . sql_escape($_POST, $field_values, array('name', 'type1', 'type2', 'type3','time'));
2014-02-25 来自:红黑旅

参数空传null就可以了.

if(! isset(type2)) $type2 = 'NULL';

最后拼sql, 如果type2为空, sql就是

insert into mytable (name,type,type2,type3,time) VALUES('name-value','type-value',NULL ,'type3-value',now()
2014-02-25 来自:胡正经

看你给的代码应该是根据传入参数是否为空, 来构造SQL语句. 你只需要将变化的SQL语句构造好并将字符串连接起来就可以了. 多余的我就不提了, 希望你能自己想明白.

您的回应

你还未登陆,不能回应!登陆