Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 批量插入foreach语句_Php_Mysql - Fatal编程技术网

Php 批量插入foreach语句

Php 批量插入foreach语句,php,mysql,Php,Mysql,我想批量插入所有POST数据,而不必单独键入每个名称/字段。最后一行的mysqlINSERT是否正确?另外,我不必再次重新处理mysql\u real\u escape\u string(),插入正确吗 if (is_array($_POST['add'])) foreach ($_POST['add'] as $key => $value) $_POST['add'][$key] = mysql_real_escape_string(stripslashes($value)

我想批量插入所有POST数据,而不必单独键入每个名称/字段。最后一行的mysql
INSERT
是否正确?另外,我不必再次重新处理
mysql\u real\u escape\u string()
,插入正确吗

if (is_array($_POST['add']))
   foreach ($_POST['add'] as $key => $value) 
   $_POST['add'][$key] = mysql_real_escape_string(stripslashes($value));

   mysql_query("UPDATE mem SET m_".$key."='".$value."' WHERE m_id=$id");

.... more code

   mysql_query("INSERT INTO meminfo m_".$key." VALUES '".$value."'");

这段代码易于注入

您必须将密钥列入白名单以进行保护。
下面是为mysql查询生成SET语句的函数

function dbSet($fields, $source = array()) { 
  $set=''; 
  if (!$source) $source = &$_POST; 
  foreach ($fields as $field) { 
    if (isset($source[$field])) { 
      $set.="`$field`='".mysql_real_escape_string($source[$field])."', "; 
    } 
  } 
  return substr($set, 0, -2);  
} 
像这样使用

$fields = explode(" ","name surname lastname address zip fax phone"); 
$query  = "INSERT INTO $table SET ".dbSet($fields,$_POST['add']); 
$fields = array("foo","bar"); 
$query  = "UPDATE $table SET ".dbSet($fields,$_POST['add'])." where id=".intval($id); 

您可以这样做:

$fields = $values = $set = '';

foreach ($_POST as $key=>$value) {
  $fields .= '`fld_' . $key . '`,';
  $values .= '"' . mysql_real_escape_string($value) . '",';
  $set .= '`fld_' . $key . '` = "'  . $mysql_real_escape_string($value) .  '",';
}

$fields = substr($fields, 0, -1);
$values = substr($values, 0, -1);
$set = substr($set, 0, -1);

$sql_insert = 'INSERT INTO `table` (' . $fields . ') VALUES (' . $values . ');';
$sql_update = 'UPDATE `table` SET ' . $set . ' WHERE `fld_id`=' . $id . ';';

这段代码没有经过测试,我只是从头开始写的,可能有一些错误。

请不要通过连接字符串来构建SQL@idstam他必须连接。这是无法避免的。这正是问题的关键所在。请记住也要转义键,你永远不知道攻击者会走多远。有关$fields变量的问题,我是否必须始终写出所有字段名,或者我是否可以执行
m.$\u POST['add']。“
如果执行$\u POST['add']您将允许SQL注入。感谢您回复我的后续问题并帮助我提高代码的安全性-谢谢