使用变量,替换SQL select语句和PHP Prepare语句。我哪里出错了?

时间:2012-10-06 21:51:22

标签: php mysql prepared-statement

我有一些在其中使用SQL select语句的工作代码。作为一个静态的代码,它工作得很好,但是,我希望能够在其中使用变量。因此,在进行我的研究时,每个人都说你应该使用PHP Prepare语句来保证安全。所以,我的旧代码看起来像这样:

    /*** MY OLD WORKING CODE ***/ 
    /*** SQL Query ***/   
    $sql = "SELECT tickets.ref AS `Ticket Number` ......
    .....BLAH................INTERVAL 30 DAY) AND 
    organizations.name = 'NAMEIWANTTOUSE' ";

    /*** For Each Loop to Build Table ***/
    foreach ($dbh->query($sql) as $row){ 
     echo "<tr>"; 
      echo "<td bgcolor=89FF95 align=center>".$row['Ticket Number']."</td>"; 
       ETC..................
    } 
    $sql->closeCursor();

我的新代码,我试图开始工作..似乎什么都不做。我知道我不太喜欢它,但我只是无法掌握哪个变量我应该推进我的FOREACH循环..或者我是否真的得到了PHP Prepare声明?

有人建议吗?

    /*** MY NEW NOT WORKING CODE ***/ 
    /*** Variables ***/
    $NAME = 'NAMEIWANTTOUSE';
    $DAYS = '30';

    /*** Prepare the SQL Query ***/
    $stmt = $sql->prepare("SELECT tickets.ref AS `Ticket Number` .......
    ....BLAH................INTERVAL :DAYS DAY) AND
    organizations.name = :NAME ");

    $stmt->bindParam(":DAYS", $DAYS);
    $stmt->bindParam(":NAME", $NAME);
    $stmt->setFetchMode(PDO::FETCH_ASSOC);
    $stmt->execute();

    /*** Put each return from SQL into a Variable? ***/
    $MySQLQuery = $stmt->fetchAll();

    /*** For Each Loop to Build Table ***/
    foreach ($dbh->query($MySQLQuery) as $row){ 
     echo "<tr>"; 
      echo "<td>".$row['Ticket Number']."</td>"; 
       ETC..................
    } 
    $sql->closeCursor();

由于

1 个答案:

答案 0 :(得分:0)

除了你不应该在循环中调用query()之外,你几乎拥有它。结果集已被提取到$MySQLQueryfetchAll() returns a 2D array,与返回需要使用mysql_query()循环的结果资源的旧mysql_fetch_*()不同。

// Following fetchAll(), $MySQLQuery is a 2D array containing your rowset.
foreach ($MySQLQuery as $row){ 
 echo "<tr>"; 
  echo "<td>".$row['Ticket Number']."</td>"; 
   ETC.........
}