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);
...
我在任何地方都找不到关于这个问题的任何类似内容,所以我想问一下,是否可以使用包含 ||
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);
...