php 在 pdo 查询中使用 or 变量

php Using an or variable in a pdo query

我在任何地方都找不到关于这个问题的任何类似内容,所以我想问一下,是否可以使用包含 || php 运算符的变量。

例如;

if ($regionID == 9) {
    $location = 'Car' || 'Bus' || 'Plane' || 'Train' || 'Bike' || 'Van';
} else {
    echo 'something went wrong';
}

    $sql=$conn->prepare("SELECT * FROM transport WHERE location = :location AND status = 2 ORDER BY ref LIMIT :limit OFFSET :start");
    $sql->bindValue(':location', $location, PDO::PARAM_STR);

该查询抛出;

PHP Catchable fatal error:  Object of class PDOStatement could not be converted to string

不知道是不是location变量中的OR运算符的原因,如果可以这样用。

你可能想把

'Car' OR 'Bus' OR 'Plane' OR 'Train' OR 'Bike' OR 'Van'

在您的查询中。根据您的设计,更好的方法是:

if($region == 9)
    $vehicles = array('Car', 'Bus', 'Plane', 'Train', 'Bike', 'Van');
else { echo 'Something went wrong'; }

    $sql=$conn->prepare("SELECT * FROM transport WHERE location IN :location AND status = 2 ORDER BY ref LIMIT :limit OFFSET :start");
    $sql->bindValue(':location', implode(",", $vehicles));

我还没有测试过,但我认为它可以工作。否则,您可以通过字符串连接将其直接放入查询中,因为这看起来不像是可以被篡改的数据。

$locations 需要是一个数组,你现在拥有它的方式是一个布尔值:

$locations= array('Car', 'Bus', 'Plane', 'Train', 'Bike', 'Van');

然后将您的代码调整为:

$sql ='
SELECT * 
FROM   transport 
WHERE  location IN (:location) 
       AND status = 2 
ORDER  BY ref 
LIMIT  :limit offset :start 
';
$sth = $db->prepare($sql);
$sql->bindValue(':location', implode(",", $locations), PDO::PARAM_STR);
...