简单的搜索查询与准备好的语句和爆炸php

时间:2018-06-11 16:40:30

标签: php

我正在尝试为航班时刻表创建搜索查询,但此查询似乎无效。我有一个表单执行查询,以便在用户搜索时显示航空公司的航班时刻表。但对于小道,我只使用出发和到达位置的位置。但是我的当前搜索查询即使在数据库中也没有显示任何结果。以下是我的代码

mainsearch.php

<?php 
error_reporting(E_ALL); 
require_once ("db.php");
$db = new MyDB();

if(isset($_POST['deptfrom']) && isset($_POST['arrat']) && isset($_POST['deptdate']) && isset($_POST['retdate']) && isset($_POST['adults']) && isset($_POST['children']) && isset($_POST['infants']) && isset($_POST['ticket']))
{
$deptfrom = filter_input(INPUT_POST, 'deptfrom', FILTER_SANITIZE_STRING);
$arrat = filter_input(INPUT_POST, 'arrat', FILTER_SANITIZE_STRING);
$deptdate = htmlspecialchars($_POST['deptdate']);
$sword = explode(" ", $deptfrom);
$ssword = explode(" ", $arrat);
$retdate = htmlspecialchars($_POST['retdate']);
$adults = htmlspecialchars($_POST['adults']);
$children = htmlspecialchars($_POST['children']);
$infants = htmlspecialchars($_POST['infants']);
$ticket = filter_input(INPUT_POST, 'ticket', FILTER_SANITIZE_STRING);

if(empty($deptfrom) || empty($arrat) || empty($deptdate) || empty($retdate) || empty($adults) || empty($ticket))
{
    echo "fill";
    exit();
}
else 
{
    foreach($sword as $dat)
    {
        foreach($ssword as $aat)
        {
            $condition .= " location LIKE '%".SQLite3::escapeString($dat)."%' AND destination LIKE '%".SQLite3::escapeString($aat)."%' AND ";
        }
    }
    $condition = substr($condition, 0, -4);

    $query = "SELECT * FROM schedule WHERE " .$condition;
    $sql = $db->prepare($query);

    $result = $sql->execute();

    while($row = $result->fetchArray(SQLITE3_ASSOC))
    {
        $airline = $row['airline'];

        echo $airline;
    }    
}
}
?>

此查询似乎没有显示任何错误或答案。可能是什么问题呢?非常感谢。

1 个答案:

答案 0 :(得分:0)

为了获得更好的结果,您应该检查错误。如果您使用mysqli,则使用连接对象的$con->error

如果您使用PDO,请使用

$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);