MySQL-php post 多个空值 insert mysql
如果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 请用面向过程的方法解答 谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
<?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'));
看你给的代码应该是根据传入参数是否为空, 来构造SQL语句. 你只需要将变化的SQL语句构造好并将字符串连接起来就可以了. 多余的我就不提了, 希望你能自己想明白.
参数空传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)
用foreach遍历检查每个参数是否isset并拼接sql,这是最简单的方法。