2015-01-11 72 views
-2

我无法在任何地方发现任何类似的问题,所以我想我会问,是否可以使用包含|| php运算符的变量。php在pdo查询中使用变量或变量

例如;

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 

我不知道是否因为位置变量中的OR运算符,以及是否可以使用这种方式。

+0

那么,你应该使用'WHERE IN(”汽车','巴士',...)'代替。这就是通常的做法。 – Yang

+3

'||'是布尔值或在PDO中。将它应用于字符串变量没有意义。所以,我想你的问题的答案是“不”。 –

+0

我不能使用WHERE IN,因为如IF语句所示,如果regionID等于8,那么$ location字符串将返回一些其他结果,因此在这种情况下,哪里没有意义。 'WHERE IN'可以工作的唯一方法是在每次重复查询的if语句中包含一个不同的查询 – user3763859

回答

0

$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); 
... 
1

你可能想在投入

'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)); 

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