【问题标题】:How to scroll the result of PHP-Postgres SELECT FROM query?如何滚动 PHP-Postgres SELECT FROM 查询的结果?
【发布时间】:2019-08-28 23:04:02
【问题描述】:

我从 jQuery 中调用了一个简单的 PHP-Postgres 数据库查找函数。我在 Postgres 中使用 SELECT FROM 查询。我想验证输入的密码是否与记录中的密码匹配,并向 jQuery 返回是或否。为此,我需要滚动查询结果。

这是执行查询的 PHP 程序部分:

// Query the database

    $email_field = $_POST['email_field'];
    $password = $_POST['password'];

try {

$email_field = $_POST['email_field'];
$password = $_POST['password'];

$data = [
    'email_field' => $email_field,
];

$sql = "select * from tbl01 where email=:email_field";

$stmt= $pdo->prepare($sql,[PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL]);
$stmt->execute($data);

echo "Statement selected";

print_r($stmt->errorInfo());

$no=$stmt->rowCount();
echo " No of records = ".$no;
echo PHP_EOL;

while($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 
   echo $row;
   echo PHP_EOL; }

} catch (PDOException $e) {
    error_log($e->getMessage());
}

$pdo = null;

?>

上面的行正确执行。回显“选择的声明”;在开发控制台中显示,但没有来自:

while($row = $stmt->fetch(PDO::FETCH_ASSOC)) { echo $row; }

所以我的问题是如何从该查询中检索行(一一)?我知道表中有一行与我发送的查询匹配,因为当我直接发出查询时,我可以在 Putty 命令行上看到它。

我认为这是一个基本问题,但我还没有找到答案。

感谢您的帮助。

编辑:根据 Nick 的评论(如下),这是 print_r($stmt->errorInfo()); 返回的错误;

Statement selectedArray
(
    [0] => 42703
    [1] => 7
    [2] => ERROR:  column "email_field" does not exist
LINE 1: ...SOR WITH HOLD FOR select * from tbl01 where email=email_fiel...
                                                        ^
)

最新消息,感谢 Nick 终于成功了(见下文):

Array
(
    [0] => 00000
    [1] => 
    [2] => 
)
1
Array
(
    [date] => 2019-08-27
    [0] => 2019-08-27
    [email] => janis@joplin.com
    [1] => janis@joplin.com
    [firstname] => Janis
    [2] => Janis
    [lastname] => Joplin
    [3] => Joplin
    [password] => pwdph
    [4] => pwdph
    [comments] => pwdph
    [5] => pwdph
    [sendupdates] => Yes
    [6] => Yes
)

【问题讨论】:

  • 为什么要发送整行作为输出?至少你会泄露密码哈希,更不用说那里可能有其他 PII。
  • 我现在正在测试和开发。解决此问题后,我会处理安全问题。

标签: php postgresql


【解决方案1】:

你的查询字符串有问题,你没有正确声明参数,应该是:email_field:

$sql = "select * from tbl01 where email=:email_field";

另外,您在传递给execute 的数组中有太多变量。只有查询中实际使用的值才应该在其中,因此请删除 password 值。

还要注意while($row = $stmt->fetch(PDO::FETCH_ASSOC)) 中的$row 是一个数组,所以你需要print_rvar_dump 它,echo $row; 将简单地输出Array

【讨论】:

猜你喜欢
  • 2020-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-15
  • 1970-01-01
  • 2020-04-13
  • 1970-01-01
  • 2021-06-19
相关资源
最近更新 更多