Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.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 向每个表列插入数组数据_Php_Mysql - Fatal编程技术网

Php 向每个表列插入数组数据

Php 向每个表列插入数组数据,php,mysql,Php,Mysql,这是来自print\r($\u POST) 用于$\u POST的循环 $data = array(); foreach ($_POST as $key => $value) { $data[] = $value; } 声明 INSERT INTO table (january,february,march) VALUES (".implode(", ", $data).") 使用此当前数组,如何生成正确的语句?我想像这样存储数据 id january february marc

这是来自
print\r($\u POST)

用于
$\u POST
的循环

$data = array();
foreach ($_POST as $key => $value) {
   $data[] = $value;
}
声明

INSERT INTO table (january,february,march) VALUES (".implode(", ", $data).")
使用此当前数组,如何生成正确的语句?我想像这样存储数据

id january february march
--------------------------
1  10      9        2
2  20      8        5
3  5       10       6
这样做:

$month = array("january" => array(10, 20, 5), "february" => array(1,2,3), "march" => array(3,4,5));

$datasets = array();

foreach ($month as $monthname => $monthdata)
{
    foreach ($monthdata as $i => $data)
    {
        $datasets[$i][] = intval($data);
    }
}

$values = array();

foreach ($datasets as $dataset)
{
    $values[] = "(" . implode(", ", $dataset) . ")";
}


echo "INSERT INTO table (january,february,march) VALUES " . implode(", ", $values);

我在代码中添加了一个
intval
,以应用一些“基本安全性”,因为您不应该在数据库中插入未经筛选的用户数据。请告知自己准备好的语句和代码;)

这就是我要做的:

$rows=sizeof($_POST['january']);#find how many rows we want to add
for($i=0;$i<$rows;$i++){
  $columns=array();
  $values=array();
  foreach ($_POST as $key => $value) {
    $columns[]=$key;
    $values[]=$value;
  }
  $sql="INSERT INTO table (".implode(",",$columns).") VALUES (".implode(",",$values).")"
  mysql_query($sql)
}
$rows=sizeof($_POST['一月])#查找要添加的行数
对于($i=0;$i$value){
$columns[]=$key;
$values[]=$value;
}
$sql=“插入到表中(“.inpolde(“,”,$columns)。”)值(“.inpolde(“,”,$VALUES)。”)
mysql\u查询($sql)
}

首先尝试手动编写查询。因此,插入3行硬编码值的完整查询。
intval
不能代替转义。如果使用占位符而不是实际数据,安全性将提高10亿倍。输入值后可能存在什么安全漏洞?
intval
会产生错误的安全感。这不是解决严重问题的通用解决方案。基本上,这是一个危险的信号,表明了不良的逃跑行为。我还是不明白。它修复了所有sql注入漏洞,如果你想要一个int,有什么大不了的?我的意思是,你可以使用filter_var,它可以做一些范围检查,但是作为一种基本的方法,我看不出有什么问题。那么,你怎么处理字符串数据呢
intval
在这方面帮不了你。它还会损坏十进制值,无法处理布尔值或日期。这是一个狭隘的解决方案,在一般实践中毫无用处。如果这是你的想法,你真的需要仔细阅读,因为这绝对是可怕的。不要这样做。曾经出于人性的考虑,停止使用mysql\u query。我刚才使用的格式与OP使用的格式相同。问题更多的是关于php方面,而不是mysql方面。你不应该对此投反对票。如果有人把它投入生产,就会造成一个巨大的安全漏洞。因为这会助长不计后果的不良行为,所以这不是一个好答案。添加转义可能会让人恼火,但它会使答案正确且安全。
$rows=sizeof($_POST['january']);#find how many rows we want to add
for($i=0;$i<$rows;$i++){
  $columns=array();
  $values=array();
  foreach ($_POST as $key => $value) {
    $columns[]=$key;
    $values[]=$value;
  }
  $sql="INSERT INTO table (".implode(",",$columns).") VALUES (".implode(",",$values).")"
  mysql_query($sql)
}