2017-07-25 123 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

相关问题