【问题标题】:mysqli_stmt::fetch() expects exactly 0 parameters, 1 given in [duplicate]mysqli_stmt::fetch() 需要 0 个参数,1 在 [重复]
【发布时间】:2019-08-28 20:20:36
【问题描述】:

我尝试从数据库中选择用户名,当我获取它时,我收到了错误消息。

mysqli_stmt::fetch() 需要 0 个参数,其中 1 个给出

<?php

require 'dbh.inc.php';

if(!empty($_POST['username']) && !empty($_POST['password'])):

    $records = $conn->prepare('SELECT id, username, password FROM users WHERE username = ?');
    $records->bind_param('s', $_POST['username']);
    $records->execute() or die($records->error);
    $result = $records->fetch(PDO::FETCH_ASSOC);

    if(count($result) > 0 && password_verify($_POST['password'], $result['password'])){
        die('We have a login');
    }else{
        die('Something went wrong!');
    }

endif;

?>

【问题讨论】:

标签: php sql mysqli pdo


【解决方案1】:

您正在使用带有fetch() MySQLi 方法的 PDO 提取样式。

试试这个:

$result = $records->fetch();

如果你真的想使用 PDO fetch 风格,我建议使用 PDO 而不是 MySQLi。

【讨论】:

  • 它删除了错误信息但仍然错误:(
  • 为什么还是错了?错误的数据集?没有数据?
  • mysqli fetch() 函数没有返回一行数据作为结果。它只返回 true、false 或 null。
  • 是的,他需要bind_result 方法来检索数据。无论如何代码都是错误的,但我的帖子回答了主要问题。
  • $result = $records-&gt;get_result()-&gt;fetch_assoc(); 有帮助:)
【解决方案2】:

您似乎正在调用 mysqli_stmt::fetch(),但希望它的行为类似于 PDOStatement::fetch()

即使函数名称相同,但它们来自不同的扩展,您不能将它们混合使用。如果你想使用 PDO fetch(),你应该使用 PDO 连接到你的数据库。

另外,mysqli_stmt::fetch() 函数不返回一行数据。它依赖于你binding results to variables

我更喜欢 PDO 样式,其中PDOStatement::fetch() 返回一行。我建议您将代码转换为始终使用 PDO。

【讨论】:

  • 我明白了,所以我应该使用 PDO DB 吗?我还能做什么?
  • 您应该使用 mysqli,或者使用 PDO。但不要试图混搭。阅读文档并查看代码示例。
  • $result = $records-&gt;get_result()-&gt;fetch_assoc(); 有帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-18
  • 2021-02-06
  • 2014-11-22
  • 1970-01-01
  • 2019-03-24
  • 1970-01-01
相关资源
最近更新 更多