postgresql选择带变量的查询

时间:2015-02-13 08:59:01

标签: php postgresql

我正在尝试使用php进行postgresql select查询工作,但无法通过语法。

我有一个变量和一个返回任何匹配姓氏的查询。

$name = 'Smith';
$query = 'SELECT surname FROM emploee WHERE name= '.$name.';';
$a = pg_query(connect(),$query );
while($row = pg_fetch_array($a)){ echo "Match";    }

对于那些想知道为什么我必须将Smith声明为变量的人来说,$ name并不总是=史密斯。 $ name的值从另一个查询中正确。但是,这不起作用。我在一篇文章中读到我应该使用pg_query_params(),但是也无法使用它。

非常感谢您的帮助

3 个答案:

答案 0 :(得分:1)

试试这个:

$query = "SELECT surname FROM emploee WHERE name= '" . $name . "';";

没有约束力的最佳方式:

$query = sprintf("SELECT surname FROM emploee WHERE name = '%s'", pg_escape_string($name));

如果你想使用绑定:

$result = pg_query_params(connect(), 'SELECT surname FROM emploee WHERE name = $1', array($name));

当您从其他查询'Smith'获得结果时,会有一个空格。

要从$name中删除空格,您可以执行:$name = trim($name);

答案 1 :(得分:0)

分别由Bang和Frank Heikens提出的这两种方法是有效的。由于他们只是评论,我发布它作为那些可能出现同样情况的人的答案。但是,我强烈建议他们阅读评论。我在途中学到了很多东西,你也可以。

Bang的建议 - >

$a = trim($name); 
$query = "SELECT surname FROM employee WHERE name= '" . $a . "';"; 
$result = pg_query(connect(), $query); 
while($row = pg_fetch_array($result)){ echo "Match"; }

Frank Heikens的建议 - >

$n = trim($name);
$s = trim($surname);
$params = array ($n, $s);
$result = pg_query_params(connect(), 'SELECT office FROM emploee WHERE name = $1 and surname = $2', $params);
while($row = pg_fetch_array($result)){ $k = $row['path']." ".$row['office'];  echo $k; }

在这两种情况下我都必须使用修剪(不确定这是否也是你的情况)。我添加了第三个字段 office 来演示如何获取多个参数。 如果有人有其他批评,建议或解决方案,请成为我的客人。我会尝试每个人并告诉你。

答案 2 :(得分:0)

使用上面的代码:您可以打印"匹配"对于与查询匹配的每条记录

$a = trim($name); 
$query = "SELECT surname FROM employee WHERE name= '" . $a . "';"; 
$result = pg_query(connect(), $query); 
while($row = pg_fetch_array($result)){ echo "Match"; }

但当然你需要打印返回的值: 只需让它回显$row['columnName']

此处详细信息:https://w3resource.com/PostgreSQL/select.php