有无好的写法?

luofeiyu
  • 1.5k
<?php
$x1=$_POST["x1"];
$x2=$_POST["x2"];
$x3=$_POST["x3"];
$x4=$_POST["x4"];
$x5=$_POST["x5"];

function insertData(){
    $query_insert = "insert into english (`f1`,`f2`,`f3`,`f4`,`f5`) 
                     values('$x1','$x2','$x3','$x4','$x5')"; 
    $con->query($query_insert);
    do some  other ting;
}
?>

这也太繁琐了哈

<?php
function insertData(){
    global $_POST;
    extract($_POST);
    $query_insert = "insert into english (`f1`,`f2`,`f3`,`f4`,`f5`) 
                     values('$x1','$x2','$x3','$x4','$x5')"; 
    $con->query($query_insert);
    do some  other ting;
}
?>

extract($_POST); 不安全,淘汰。

<?php
function insertData(){
    $query_insert = "insert into english (`f1`,`f2`,`f3`,`f4`,`f5`) 
                     values('$_POST["x1"]','$_POST["x2"]','$_POST["x3"]','$_POST["x4"]','$_POST["x5"]')"; 
    $con->query($query_insert);
    do some  other ting;
}
?>

这样也很ugly,请问,有无最好的办法?
要简洁,要漂亮

回复
阅读 1.6k
5 个回答

要简洁,要漂亮,却不用找个趁手的DB组件?
自撸SQL本来就丑翻天

先改成 PDO 预处理方式插入数据吧

你这个要先保证$_POST里面只有那几个参数,不然你都只能是一个个取出来,没什么简洁的方法。。插入的话,使用pdo,然后参数绑定,自动帮你处理sql的安全问题。

应该编写单一用途且无状态的函数.
用户提交的数据的格式检查不应该放到一个插入函数中.
插入函数应该只负责数据的插入,实现单一用途.
函数内不应该出现$_GET/$_POST这些有状态的量,尽量无状态.

function conf_add($name, $value) {
    $db = new PDO();
    $name = $db->quote($name);
    $value = $db->quote($value);
    $sql = "INSERT INTO `conf` (`name`, `value`) VALUES ({$name}, {$value})";
    $rowCount = $db->query($sql)->rowCount();
    return ($rowCount === 0) ? false : $db->lastInsertId();
}

function conf_edit($name, $value) {
    $db = new PDO();
    $name = $db->quote($name);
    $value = $db->quote($value);
    $sql = "UPDATE `conf` SET `value` = {$value} WHERE `name` = {$name}";
    $rowCount = $db->query($sql)->rowCount();
    return ($rowCount === 0) ? false : true;
}

function conf_del($name) {
    $db = new PDO();
    $name = $db->quote($name);
    $sql = "DELETE FROM `conf` WHERE `name` = {$name}";
    $rowCount = $db->query($sql)->rowCount();
    return ($rowCount === 0) ? false : true;
}

function conf_get($name) {
    $db = new PDO();
    $name = $db->quote($name);
    $sql = "SELECT `value` FROM `conf` WHERE `name` = {$name}";
    $rows = $db->query($sql)->fetchAll();
    return (!isset($rows[0])) ? false : $rows[0]['value'];
}

function conf_set($name, $value) {
    if (conf_edit($name, $value)) {
        return true;
    } else {
        if (!conf_add($name, $value)) {
            return false;
        } else {
            return true;
        }
    }
}
<input name = "form['x']">
<input name = "form['y']">
...

这样取一个$_POST['form']就能取到全部的。但是实际上还要做后端的验证,还需要做验证的封装(参考主流的一些框架),否则还是要单独的一个个判定。

宣传栏