开发者社区> 问答> 正文

关于表单post过来的数据写入数据表的封装问题:报错

从表单中post的数组 array('user'=>'mario','email'=>'12345')过来的信息我可以 $arr=$_POST;

那么,如果我是使用函数function封装的话,需要把post过来的数据写入数据库,该怎么操作呢?求指教。

如果是面向过程,我知道怎么写。

$user = $_POST['user'];

$sql = "insert into (`user`,`email`)VALUES('$user,'$email'')";

.......

但是如果是封装函数呢?这个函数应该怎么写?

例如

function ($table,$arr)

{

这里面改怎么写?怎么吧数组拆分?

}

展开
收起
kun坤 2020-06-09 22:23:13 433 0
1 条回答
写回答
取消 提交回答
  • /**
     * 插入数据库
     * @param $table
     * @param $data
     */
    function insert($table, $data)
    {
    	//解析字段
    	$attrs= array_keys($data);
    	$cols = join(',',$attrs);
    	//解析值
    	//因为值有字符串和数字之分,都加上单引号
    	foreach($data as &$row){
    		$row = "'".$row."'";
    	}
    	$datas = join(',',$data);
    	
    	//生成的SQL为
    	$sql = "INSERT INTO `{$table}`({$cols}) VALUES ({$datas})";
    }



    记得最佳答案喔~



    ######回复 @JeffreyLin : 我现在都用PDO来做的。######使用sql语句的时候,会有这样一个情况:我打印出来了 insert into `admin_user`(`user,email,password`)VALUES(林伟盛,1113288996@qq.com,3363064) 问题处在admin_user(`涵括了`,导致语法错误)######拼接参数的写法存在注入式攻击的危险呀,要用参数化写法######

    funciton populateForm($reules){

     balabala....

     if ($valid){

     return array("valid"=>true,"data"=array(cleandata));

    }else {

     return array("valid"=>false,"errormsg"=array(wrongdata));

    }

    }

    ######function insertData($tableName,$dataArr)
    {
        //...check tableName  
        if (count($dataArr) == 0){
            return False;
        }
        $fields = array_keys($dataArr);
        foreach ($dataArr as $value){
            $val[] = $value;
        }
        $sql = "INSERT INTO `{$tableName}`(".implode(',', $fields).") VALUES (".implode(',', $val).")";
        //...execute Sql
        //...return dataResult
    }######

    引用来自“xialeistudio”的评论

    /**
     * 插入数据库
     * @param $table
     * @param $data
     */
    function insert($table, $data)
    {
    	//解析字段
    	$attrs= array_keys($data);
    	$cols = join(',',$attrs);
    	//解析值
    	//因为值有字符串和数字之分,都加上单引号
    	foreach($data as &$row){
    		$row = "'".$row."'";
    	}
    	$datas = join(',',$data);
    	
    	//生成的SQL为
    	$sql = "INSERT INTO `{$table}`({$cols}) VALUES ({$datas})";
    }



    记得最佳答案喔~



    $arr = array('user'=>'kopa','email'=>'1113288996@qq.com');


    $arr1 = array_keys($arr);


    // print_r($arr1);
    $str = implode(',', $arr1);
    // print_r($str);
    foreach ($arr as $key) {
    $key = "'".$key."'";
    // print_r($key);
    }
    $arr = implode(',', $arr);

    print_r($arr);


    分解了一遍,完全明白。感谢!

    ######

    正确的写法应该是

     $str = '`'.implode('`,`',array_keys($arr)).'`';

    $arr = "'".implode("','",$arr)."'";

    这样出来的结果才是insert into `table`(`user`,`passwd`) values('$user','$passwd';)

      

    2020-06-09 22:23:18
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载