MySQL查询结果的第一行未显示在应该存在的位置

时间:2017-08-27 11:34:19

标签: php mysql sql foreach

我试图让SQL查询运行一个显示航空公司名称列表的数组。但是第一个结果总是空的

1

  1. 国泰航空

  2. 英国航空公司

  3. 新加坡航空

    等,应该显示:

    1. 国泰航空

    2. 英国航空公司

    3. 新加坡航空

    4. 我得到的代码是:

      foreach ($flights as $b) {
      $flightdata = explode(" ", $b);
      $airline = $flightdata[2];
      
      
      $link = mysql_connect('xxx', 'xxx', 'xxx');
      if (!$link) {
          die('Could not connect: ' . mysql_error());
      }
      
      mysql_select_db("xxx") or die(mysql_error());
      
      $fetchairlinecode = "SELECT * FROM  `airlines` WHERE  `iatacode` =  '$airline' LIMIT 0 , 30";
      
      $rs=mysql_query($fetchairlinecode);
      
      while ($row = mysql_fetch_array($rs)){
      
      echo $row['airlinename'];   
      }
      
      mysql_close($link); 
      
      }
      

      任何人都可以看到我做错了吗?

1 个答案:

答案 0 :(得分:1)

首先要摆脱非参数化的查询。

$fetchairlinecode = 
"SELECT * FROM  `airlines` WHERE  `iatacode` =  '$airline' LIMIT 0 , 30";

变为

$fetchairlinecode = 
"SELECT airlinename FROM  `airlines` WHERE  `iatacode` =  ? LIMIT 30";";

use mysqliPDO

$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');    
if ($mysqli->connect_error) {
    die('Connect Error (' . $mysqli->connect_errno . ') '
            . $mysqli->connect_error);
}

foreach ($flights as $b) {
    $flightdata = explode(" ", $b);
    $airline = $flightdata[2];
    $fetchairlinecode = 
    "SELECT airlinename FROM  `airlines` WHERE  `iatacode` =  ? LIMIT 30";
    $stmt = $mysqli->prepare($fetchairlinecode);
    $stmt->bind_param( "s", $airline); 
    $stmt->execute();
    $stmt->bind_result($airlinename);
    while ( $stmt->fetch() ) {
        echo $airlinename;
    }
}
$mysqli->close();

请勿使用now long obsolete mysql library

在foreach语句之前只打开一次数据库连接。

而不是LIMIT 0 , 30,您只需撰写LIMIT 30