2017-07-25 145 views
2

對於參數化postgresql查詢,我該如何返回行中的值或提供的參數。獲取參數的最大值或最小值到行值postgres

我有一個表有三列(我們將其稱爲foo):idmaximumminimum

我想選擇的行,這樣的最大值和最小值將有一個天花板或地板上,我提供他們。直接在postgresql中,我可以選擇像這樣:

SELECT 
    id, 
    GREATEST(minimum, 5), 
    LEAST(maximum, 10) 
FROM foo 

因此,這將只返回每行5到10之間的值。

然而,當將這種在我的PHP代碼中使用:

$floor = 5; 
$ceiling = 10; 
$query = 'SELECT id, GREATEST(minimum, $2), LEAST(maximum, $1) FROM foo'; 
$parameters = [ $ceiling, $floor]; 
$result = pg_query_params($query, $parameters); 

這不起作用,因爲參數需要被查詢的WHERE子句。如何編寫查詢以便我能夠正確傳遞參數?

回答

0

您可以使用定界符:

$floor = 5; 
$ceiling = 10; 

$query = <<<SQL 
SELECT 
    id, 
    GREATEST(minimum, $floor), 
    LEAST(maximum, $ceiling) 
FROM 
    foo 
SQL; 

$result = pg_query_params($query); 

僅供參考,請參閱:

+0

但是這意味着我失去了從SQL注入保護使用的參數。 – Schleis

+0

用戶提供的值是否已修復? – localheinz

+0

由用戶提供。我的問題是使用整數,但我也想更一般地瞭解。如果我需要使用字符串做類似的事情。我不能在我的例子中使用'intval'。 – Schleis

相關問題