【问题标题】:foreach loop throwing an errorforeach 循环抛出错误
【发布时间】:2025-11-24 22:45:01
【问题描述】:

我正在将一个数组从 js 调用(ajax)传递到一个 php 页面并抛出一个错误。错误所在的代码行是:

     foreach ($array as list($a, $b, $c, $d, $e, $f, $g, $h)) {

这是我第一次尝试 pdo。

谁能看出代码有什么问题?

js & ajax 调用:

  var outerarray=[];
  var innerarray = [];
  innerarray[0]="1";
  innerarray[1]="2";
  innerarray[2]="3";
  innerarray[3]="4";
  innerarray[4]="5";
  innerarray[5]="6";    
  innerarray[6]="7";
  innerarray[7]="8";
  innerarray[8]="9";
  innerarray[9]="10";
  innerarray[10]="11";  
  innerarray[11]="1";                
  innerarray[12]="13";
  outerarray[0]=innerarray;     

  $.ajax({
    type: "POST",
    url: "ajax/upadateElements.php",        
    data: {outerarray:outerarray},          
    success:function(data){
      alert("data:"+data);                                      
    },
    error: function(data){
       alert("failure");
    }
  });

updateElements.php 代码

   $db = new PDO('mysql:host=localhost;dbname=dbname;charset=utf8', username, password, array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));


  $array[]=$_POST['outerarray'];
  foreach ($array as list($a, $b, $c, $d, $e, $f, $g, $h)) {
      $stmt = $db->prepare("SELECT * FROM table WHERE a=:a AND b=:b");
      $stmt->execute(array(':a' => $a, ':b' => $b));
      $row_count = $stmt->rowCount();   
      if($row_count==0){
         $stmt = $db->prepare("INSERT INTO table(a, b, c, d, e, f, g, h) VALUES(:field1,:field2,:field3,:field4,:field5,:field6,:field7,:field8)");                          $stmt->execute(array(':field1' => $a, ':field2' => $b, ':field3' => $c, ':field4' => $d, ':field5' => $e, ':field6' => $f, ':field7' => $g, ':field8' => $h));
         $affected_rows = $stmt->rowCount();                    
       }

       if($affected_rows !=0){          
         echo "success";
       }else{
         echo "fail";
       }                            

【问题讨论】:

  • 错误信息是什么?
  • 代码有效吗?如果是这样,谁在乎编辑说什么?
  • 我无法运行代码,直到我确定它没问题,因为它会搞砸我的数据库,dreamweaver 已用红色突出显示代码行
  • 应该是innerarray[11]="1";还是innerarray[11]="12";
  • Dreamweaver 并不总是正确的。

标签: php foreach dreamweaver


【解决方案1】:

在您的SELECT SQL 语句中,您正在搜索列pagebref,但在您的INSERT 语句中,您试图用相同的值填充列b。检查您的列名。

还要注意在foreach 中使用list,仅在 PHP >= 5.5 的情况下使用。对于旧版本,替代方法可能是:

foreach ($array as $data) {
    list($a, $b, $c, $d, $e, $f, $g, $h) = $data;
    ...

【讨论】:

  • 很抱歉,这是剥离真实数据时的拼写错误。我得到的错误是 PHP Parse error: syntax error, unexpected T_LIST in /home/etc/etc............在线..
  • 如果我去掉'foreach'循环中的所有内容,错误仍然在dreamweaver中突出显示,它的定义是'foreach'行是问题
  • 我在我的服务器上运行 php 5.3,这是问题吗?
  • 注意在foreachit only works with PHP >= 5.5 中使用list
  • 谢谢,我在 php.net 上误读了用 list() '(PHP 5 >= 5.5.0) 解包嵌套数组 PHP 5.5 添加了遍历数组数组并解包嵌套数组的功能通过提供 list() 作为值将数组放入循环变量中。我错过了 PHP 5.5。位,您可以添加作为答案,以便我可以关闭它
【解决方案2】:

感谢@Edakos 帮助我解决这个问题。问题是你不能在 PHP 的 foreach 循环中使用 list()

我不知道为什么人们会否决这个问题。

【讨论】:

    最近更新 更多