foreach循环抛出错误

时间:2013-12-02 13:51:52

标签: php foreach dreamweaver

我从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";
       }                            

2 个答案:

答案 0 :(得分:0)

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

另外,只需使用PHP> = 5.5在list内使用foreach。对于旧版本,替代方案可以是:

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

答案 1 :(得分:0)

感谢@Edakos帮助我解决这个问题。问题是你不能在PHP< 5.5

中的foreach循环中使用list()

我不知道为什么人们会拒绝这个问题。