php/postgres-查询输出不会在浏览器上打印
我正在用Php和postgresql编写一个简单的用户/登录系统 我有一个确认用户名/密码是否存在的功能,当用户按下登录按钮时会激活该功能php/postgres-查询输出不会在浏览器上打印,php,postgresql,printf,echo,Php,Postgresql,Printf,Echo,我正在用Php和postgresql编写一个简单的用户/登录系统 我有一个确认用户名/密码是否存在的功能,当用户按下登录按钮时会激活该功能 public function confirmUserPass($username, $password){ $username=pg_escape_string($username); /* Verify that user is in database */ $q = "SELECT password FROM users
public function confirmUserPass($username, $password){
$username=pg_escape_string($username);
/* Verify that user is in database */
$q = "SELECT password FROM users WHERE email = '$username'";
$result = pg_query($this->link,$q);
/* Do more operations */
}
我想打印存储在$results中的查询,以便在浏览器上看到它。当我使用SQL在phppgAdmin中执行此操作时,它会显示输出,但我无法在浏览器上看到它。我尝试了echo和printf,但在浏览器上看不到任何内容。我还试图从浏览器中查看视图源,但它没有显示任何内容。
有人能帮我吗
关于您必须连接到数据库,执行查询,然后获取结果。
请在php.net中尝试此示例
<?php
public function confirmUserPass($username, $password){
$username=pg_escape_string($username);
// Connecting, selecting database
$dbconn = pg_connect("host=localhost dbname=publishing user=www password=foo")
or die('Could not connect: ' . pg_last_error());
// Performing SQL query
$query = "SELECT password FROM users WHERE email = '$username'";
$result = pg_query($query) or die('Query failed: ' . pg_last_error());
// Printing results in HTML
echo "<table>\n";
while ($line = pg_fetch_array($result, null, PGSQL_ASSOC)) {
echo "\t<tr>\n";
foreach ($line as $col_value) {
echo "\t\t<td>$col_value</td>\n";
}
echo "\t</tr>\n";
}
echo "</table>\n";
// Free resultset
pg_free_result($result);
// Closing connection
pg_close($dbconn);
?>
}
?>
来自您的代码:$result=pg\u查询($this->link,$q)代码>
正如您已经发现的那样,尝试显示上面一行中的$result
的内容不会给您带来任何有用的信息。这是因为它不包含查询返回的数据;它只包含一个“资源句柄”
为了获得实际数据,必须调用pg\u query()
之后的第二个函数。您需要的函数是pg\u fetch\u array()
pg_fetch_array()
获取在$result
中给定的资源句柄,并向它请求下一组数据
SQL查询可以返回多个结果,因此典型的做法是将pg\u fetch\u array()
放入一个循环并不断调用它,直到它返回false而不是数据数组。但是,在像您这样的情况下,如果您确信它将只返回一个结果,则可以在pg_query()
之后立即调用它一次,而不使用循环
您的代码可能如下所示:
$result = pg_query($this->link,$q);
$data = pg_fetch_array($result, NULL, PGSQL_ASSOC);
echo "Password from DB was: ".$data['password'];
一旦你有了$data
,那么你就得到了数据库中的实际数据
要查看$data
中的各个字段,需要查看其数组元素。它应该为查询中的每个字段命名一个数组元素。在您的情况下,查询只包含一个字段,因此它将被称为$data['password']
。如果查询中有更多字段,则可以以类似的方式访问它们
因此,您的下一行代码可能如下所示:
$result = pg_query($this->link,$q);
$data = pg_fetch_array($result, NULL, PGSQL_ASSOC);
echo "Password from DB was: ".$data['password'];
如果要查看原始数据,可以使用print\r()
或var\u dump()
函数将其显示到浏览器中。这些函数对于测试和调试非常有用。(提示:将这些调用包装在
SELECT count(*) n FROM users WHERE email = '$username' AND password = '$hashedpass'
在这种情况下,密码将作为散列值而不是纯文本存储在DB中,WHERE
子句将其与用户输入的密码的散列版本进行比较
其思想是,这使我们能够避免在系统中的任何地方以纯文本形式访问密码,从而降低黑客攻击的风险,即使有人能够访问数据库
当然,这并不是万无一失的,对于这种安全性来说,这当然不是全部,但肯定会比现在看起来更好。你真的在任何地方调用该函数吗?echo“$q”
不起作用?是的,我调用这个函数和“echo…”浏览器上不显示任何内容pg_query($query)是否应为pg_query($dbconn,$query)?当连接不存在时,使用默认连接。默认连接是由pg_connect()或pg_pconnect()创建的最后一个连接,将pg_connect(SSS)替换为pg_connect(此处为您的连接字符串)我在浏览器上有一些CSS样式,这是我无法打印的原因吗?这是一个很好的建议,我将保留它以备将来开发。print\r和var\u dump尚未在浏览器上打印任何内容。