5
回答
关于表单post过来的数据写入数据表的封装问题
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

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

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

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

$user = $_POST['user'];

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

.......

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

例如

function ($table,$arr)

{

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

}

<无标签>
举报
林伟盛
发帖于3年前 5回/261阅
共有5个答案 最后回答: 3年前

/**
 * 插入数据库
 * @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})";
}



记得最佳答案喔~



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

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';)

  

顶部