从PHP预处理语句返回一个布尔值

时间:2014-01-30 19:48:07

标签: php html mysql sql

这是一个非常简单的查询,用于检查卡车是否可用(理论上)。 我不是很擅长PHP,但试图学习准备好的语句。

function truck_available($plate) {
$query = "(SELECT COUNT(`id`) FROM `trucks` WHERE `plate` = '$plate')";

$result = $db->query($query);
$result = $result->fetch();

echo $result[0];
}

这里的目标是以最简单的新手友好方式返回布尔值。 我偶然发现了这个'? true:false'我真的很喜欢这个。但是虽然我实现了它,但感觉可能会有更有效的方式。

喜欢这样..

$result = ($result[0] > 0)? true : false;

有没有办法可以直接从查询中返回一个布尔值?

我试过这个......(但是我的知识使我无法理解如何实现它,或者为什么它不起作用。)

$query = "((SELECT COUNT(`id`) FROM `trucks` WHERE `plate` = '$plate') > 1)? true : false";

有什么想法吗?感谢

4 个答案:

答案 0 :(得分:2)

如果你真的想在查询中做这个逻辑,你可以试试这个:

SELECT TOP 1 1 FROM `trucks` WHERE `plate` = '$plate'

这可能是最有效的方法。如果找到一个条目,它将返回1,php可以看作是一个布尔值真的

答案 1 :(得分:1)

您可以稍微更改一下SQL语句,并以查询结果的形式获取truefalse

$query = "SELECT if( COUNT(`id`) > 0, true, false ) "
         . " FROM `trucks` WHERE `plate` = '$plate'";

OR

$query = "SELECT COUNT(`id`) > 0 "  // you can also avoid using if
         . " FROM `trucks` WHERE `plate` = '$plate'";

但是,您需要遍历查询结果,以查找它是true还是false

答案 2 :(得分:1)

试试这个,

$sth = $db->prepare("SELECT id FROM trucks WHERE plate = :plate");

    $sth->bindParam(':plate',$plate, PDO::PARAM_STR);

    $sth->execute();

    if ($sth->rowCount() > 0) 
    {

        //true

    } 
    else 
    {

        //false

    }

答案 3 :(得分:0)

要将值显式转换为布尔值,请使用(bool)或(boolean)强制转换

http://www.php.net/manual/en/language.types.boolean.php