2015-01-11 73 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)); 

我沒有測試過,但我認爲這是可行的。否則,您可以通過字符串連接將其直接放入查詢中,因爲這看起來不像可能被篡改的數據。