【问题标题】:PHP and MySQLi multiple queries in a single stringPHP 和 MySQLi 在单个字符串中进行多个查询
【发布时间】:2018-09-29 20:02:54
【问题描述】:

我有许多变量需要在 MySQL 数据库中查找,它们的值替换为数据库条目,然后放在一个字符串中显示给最终用户,代码如下。

我创建了下面的代码,虽然它在技术上有效,但看起来非常混乱。基本上我必须在每个变量出现在字符串中之前直接查找它(使用下面)

 $xxx = $conn->query($xxx);

这会产生看起来非常混乱的代码,并且还会导致多个数据库查询,这无疑会减慢我的网站速度。有没有我错过的更有效的方法来做到这一点?

任何帮助将不胜感激

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
} 

$airlinequery = "SELECT * FROM  `airlines` WHERE  `iatacode` =  '$airline' LIMIT 0 , 30;"; 
$depairportquery = "SELECT * FROM  `airportdata` WHERE  `airportcode` =  '$depdest' LIMIT 0 , 30;"; 
$arrairportquery = "SELECT * FROM  `airportdata` WHERE  `airportcode` =  '$arrdest' LIMIT 0 , 30;"; 
$bookingclassquery = "SELECT $bookingclass FROM `bookingclass` WHERE `airline` = '$airline' LIMIT 0 , 30;";
$utctakeoffquery = "SELECT `timezonehours`,`timezoneminutes`,`timezone` FROM `airportdata` WHERE `airportcode`= '$depdest';";
$utcarriveoffquery = "SELECT `timezonehours`,`timezoneminutes`,`timezone` FROM `airportdata` WHERE `airportcode`= '$arrdest';";

if(!$result = $conn->query($airlinequery)){
die('There was an error running the query [' . $conn->error . ']');
}

$result = $conn->query($airlinequery);
    if ($result->num_rows > 0) {
        while($row = $result->fetch_assoc()) {
        $date=date_create($depdate);
        echo date_format($date,"D d M"). " - ". $airline." ".$flightno;
    }
}


$cabinresult = $conn->query($bookingclassquery);
        if ($cabinresult->num_rows > 0) {
        while($cabinrow = $cabinresult->fetch_assoc()) {
        echo $cabinrow[$bookingclass];
        }
    }


$dresult = $conn->query($depairportquery);
    if ($dresult->num_rows > 0) {
    while($drow = $dresult->fetch_assoc()) {
    $arr = explode(' ',trim($drow['airportname']));
        if ($arr[0] == $drow['cityname']){
        $drow['cityname'] = "";
            }else{
        $drow['cityname']=  " ".$drow['cityname'];  
    }


    echo "Depart: " .$drow['airportname'].",".$drow['cityname']." (".$drow['airportcode'].") at " . $deptime."<br>";

}
}


$aresult = $conn->query($arrairportquery);
    if ($aresult->num_rows > 0) {
    while($arow = $aresult->fetch_assoc()) {
    $arr = explode(' ',trim($arow['airportname']));
        if ($arr[0] == $arow['cityname']){
        $arow['cityname'] = "";
            }else{
        $arow['cityname']=  " ".$arow['cityname'];
        }

     echo "Arrive: " .$arow['airportname'].",".$arow['cityname']." (".$arow['airportcode'].") at " . $arrtime .$nextday."
";

$arrdate ="";        
    }
} 


$conn->close();

【问题讨论】:

    标签: php string mysqli mysqli-multi-query


    【解决方案1】:

    这应该是一个评论,但它有点长,很难阅读......

    选择 *

    当你不需要时,为什么要从表中选择所有属性?您还没有提供表结构,这些表结构会在此处告知有关解决方案的许多选择。如果这些问题得到解决,我们可能会建议 UNION 或 VIEW 是否合适。

    while($row = $result->fetch_assoc()) {
        $date=date_create($depdate);
        echo date_format($date,"D d M"). " - ". $airline." ".$flightno;
    }
    

    什么是 $depdate? $航空公司? $航班号?这些应该是从 $row 检索的值吗?你的循环体从不引用 $row。您的所有查询都存在类似问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-30
      • 1970-01-01
      • 2011-01-01
      • 1970-01-01
      • 2019-03-15
      相关资源
      最近更新 更多