php/postgres-查询输出不会在浏览器上打印

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

我正在用Php和postgresql编写一个简单的用户/登录系统

我有一个确认用户名/密码是否存在的功能,当用户按下登录按钮时会激活该功能

 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尚未在浏览器上打印任何内容。