【问题标题】:Separate mysql_query from foreach validation check php将 mysql_query 与 foreach 验证检查 php 分开
【发布时间】:2012-02-25 12:18:12
【问题描述】:

这是我的代码的 sn-p。本质上,我有一个要插入到表名中的新数组,但在此之前,我会根据旧数据验证新的统计数据,确认它们是数字并插入新行。

我意识到我做了什么,mysql_query 在 foreach 循环内,它插入 5 行都是一样的。我希望它只插入 1 个新行。

如何在尝试插入新行之前将 mysql_query 置于循环之外,同时保留 foreach 循环提供的验证?

foreach ($statnumber as $element) {
if ($statnumber != $LastWeeksStats && is_numeric($element)) {
    mysql_query("INSERT INTO tablename (idproducts, stat1, stat2, stat3, stat4, stat5, superstat1) VALUES('8', '$statnumber[0]', '$statnumber[1]', '$statnumber[2]', '$statnumber[3]', '$statnumber[4]', '$statnumber[5]')") or die(mysql_error());  
    } else {
    echo "'{$element}' is NOT numeric or results same as last week", PHP_EOL;
}} 
mysql_close();

【问题讨论】:

  • 你听说过 break 关键字吗?
  • 它会结束循环,所以把它放在你的查询之后(这样它就会完成一次然后结束)——但是这种情况意味着你在设计上有错误
  • 是的,我只是在谷歌上搜索了一下,看起来它可以工作,但正如你所说的那样,这将是一个很好的工作。

标签: php mysql foreach


【解决方案1】:

我会从数组中删除未通过检查的元素,然后将 mysql 语句放在循环之外。使用 unset 但您必须像这样跟踪要取消设置的键:

foreach ($statnumber as $key => $element) {
    if($statnumber != $LastWeeksStats && is_numeric($element)) {
       //do nothing because it is valid      
    } else {
       //remove that element from the array
       unset($statnumber[$key]);
       echo "'{$element}' is NOT numeric or results same as last week", PHP_EOL;
    }
}  
//now only valid data is in the array and you can use a mysql query

您将不得不根据数组末尾实际有多少元素来更新 mysql 查询,如下所示:

foreach($statnumber as $key => $element) {
   $keys[] = "stat$key";
   $elements[] = "'$element'";
}
$keystring = implode(",",$keys);
$elementstring = implode(",",$elements);
mysql_query("INSERT INTO tablename (idproducts, $keystring, superstat1) VALUES('8', $elementstring)") or die(mysql_error());  

【讨论】:

  • 啊,好吧,如果所有元素都与上周的统计数据匹配或不是数字,它可能会删除所有元素。
  • 是的,任何未通过该测试的东西都会在 mysql 语句运行之前从数组中删除
  • 它似乎不像我需要的那样工作,如果所有元素都匹配 lastweeks 统计数据或者如果一个元素不是数字我需要不插入数据,因为它 100% 错误。您的代码将元素替换为零并继续插入新行。
  • 您将需要更改您的 mysql 查询,元素已被删除,但如果您使用的是相同的 mysql 查询,那么它会尝试查找 $statnumber[5] 是什么,例如,当什么都没有时在那里它用 0 代替它。
  • 它不起作用,我不希望它带一个元素如果两个数组包含完全相同的元素或不包含完全相同的元素,我根本不希望它插入一行数字
猜你喜欢
  • 2022-07-13
  • 1970-01-01
  • 1970-01-01
  • 2015-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多