繁体   English   中英

如何处理大型php mysql $ _POST更新/插入

[英]how to handle a large php mysql $_POST UPDATE/INSERT

我正在尝试做这样的事情,所以我不必键入我所有的帖子条目。 我似乎无法使它正常工作。

编辑:添加了一些更改。

foreach($_POST as $key => $value) 
{
    $key = "'".mysql_real_escape_string($key)."'";  
    $value = "'".mysql_real_escape_string($value)."'";
    $qstring = "UPDATE load_test SET ".$key."=".$value." WHERE Id = '".$_POST['id']."'";  
        mysql_query($qstring);
}  

您在这里试图做的事情是令人难以置信的,危险的不安全感。

// List the fields that may be updated here
$expectedFields = array('fielda', 'fieldb');

// Updated values to be stored here
$updates = array();

// Generate the update strings
foreach ($_POST as $key => $value) {
    if (in_array($key, $expectedFields)) {
        $updates[] = "`$key` = '".mysql_real_escape_string($key)."'";
    }
}  

// Do all updates at once
$qstring = "UPDATE load_test SET " . join(', ', $updates) . " WHERE Id = '" . mysql_real_escape_string($_POST['id']) . "'";  
mysql_query($qstring);

这改善了几件事

  • 所有更新都在一个查询中发生,而不是每个字段一次
  • 字段经过验证(并且已清除,因为只有它们在有效列表中才会被接受)
  • ID值也被清除
foreach($_POST as $k=>$v){
        @$select.=" `".mysql_real_escape_string($k)."` = '".mysql_real_escape_string($v)."',";
}
$select = rtrim($select,',');
$select = "UPDATE load_test SET".$select." WHERE id=".$_POST['id'];
mysql_query($select) or die(mysql_error());;

尝试此方法要快得多,然后您想要执行的上一个查询要多一些,然后其他查询我认为这样做足以安全地逸出该键,因为尝试更新不存在的列不会使您无所适从,并尝试为了避免转义,您应该确保ID是数字

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM