我正在尝试使用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(),但是也无法使用它。
非常感谢您的帮助
答案 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']