2014-01-15 41 views
0

我在下面的函数中遇到问题。基本上它应该做的是检查如果数组中的每个项目($idDiscontinuedArray)都是从其相应表(10)中断的值。将MYSQL Query的结果推送到数组中

现在我不确定将这些答案推到数组中,以使下一部分更简单。目前它单独吐出$rows

结果是:Array ([discontinued] => 1,) Array ([discontinued] => 1) Array ([discontinued] => 0) Array ([discontinued] => 0) Array ([discontinued] => 1)....,我宁愿有Array [1] => 1 [2] => 1 [3] => 0 [4] => 0 [5] => 1....

脚本的下一部分是检查,看看是否所有$rows = 1这意味着脚本结束。如果不是这种情况,将运行功能changeDiscontinued($dbh, $id, $idDiscontinuedArray)

function checkDiscontinued($dbh, $idDiscontinuedArray) { 
try { 
    foreach ($idDiscontinuedArray as $id) { 
     $stmt = $dbh->query("SELECT discontinued FROM `$id` ORDER BY `date` DESC LIMIT 1"); 
     $rows = $stmt->fetch(PDO::FETCH_ASSOC); 
     print_r($rows); 
     } 
     if $rows['discontinued'] == TRUE) { 
      //echo $id . "Action if true"; 
     } else { 
      changeDiscontinued($dbh, $id, $idDiscontinuedArray); 
      echo $id . "Items already discontinued!"; 
      }  
    } 
    catch (PDOException $e) { 
    echo $e->getMessage(); 
    } 
} 
+0

您的$语句中的$ id变量将永远是您的$ idDiscontinuedArray中的最后一个值,是您的意图吗? changeDiscontinued()应该做什么? – KorreyD

+0

您正在使用$ id作为表名,是您打算做什么的? –

+0

有人可以说大量的SQL注入漏洞吗?你已经在使用PDO,准备好这个陈述... –

回答

1

我没有测试这段代码,但是它覆盖了准备好的语句以及如何将项目推入数组。如果您想获得更多帮助,我们可以开始聊天。

$discont = array(); 

function checkDiscontinued($dbh, $idDiscontinuedArray) { 
try { 
    foreach ($idDiscontinuedArray as $id) { 
     $sql = $dbh->prepare("SELECT discontinued FROM $id ORDER BY `date` DESC LIMIT 1"); 
     $stmt = $sql->execute(array($id)); 
     $rows = $stmt->fetch(PDO::FETCH_ASSOC); 
     print_r($rows); 
     } 
     if $rows['discontinued'] == TRUE) { 
      //echo $id . "Action if true"; 
     } else { 
      changeDiscontinued($dbh, $id, $idDiscontinuedArray); 
      echo $id . "Items already discontinued!"; 
      array_push($doscont, $id); 
      }  
    } 
    catch (PDOException $e) { 
     echo $e->getMessage(); 
    } 
} 
+0

如果这个工作对你,对吧t忘记标记它是答案。 –

+0

感谢您的回复 - 我收到错误 - SQLSTATE [42000]:语法错误或访问冲突:1064您的SQL语法错误;请检查与您的MySQL服务器版本相对应的手册,以便在第1行的''19474'ORDER BY'date' DESC LIMIT 1'处使用正确的语法。 – DrDog

+0

尝试在SQL中的?,即'?'声明。 –

相关问题