【问题标题】:Fatal error: Uncaught Error: Call to undefined method mysqli_stmt::fetch_assoc() [duplicate]致命错误:未捕获的错误:调用未定义的方法 mysqli_stmt::fetch_assoc() [重复]
【发布时间】:2019-03-07 10:34:50
【问题描述】:

我正在努力学习 mysqli。

我得到这个错误:

Fatal error: Uncaught Error: Call to undefined method mysqli_stmt::fetch_assoc() in C:\xampp\htdocs\bk2\login.php:14 Stack trace: #0 {main} thrown in C:\xampp\htdocs\bk2\login.php on line 14

这是我的 db-conn.php:

 <?php
require('bk-config.php');

$conn = new mysqli($db_host, $db_user, $db_pass, $db_name);
if ($conn->connect_errno) {
    echo "Failed to connect to MySQL: (" . $conn->connect_errno . ") " . $conn->connect_error;
}

这是我的 login.php:

<?php
include 'db-conn.php';
$post_username = $_POST['post_username'];
$post_password = $_POST['post_password'];

$sql = "SELECT username, password FROM users WHERE username = ? AND password = ?";

$stmt = $conn->prepare($sql);
$stmt->bind_param("ss", $post_username, $post_password);
$stmt->execute();
$rows = $stmt->num_rows;

if($rows = 1){
  while ($row = $stmt->fetch_assoc()) {
    echo $row['username'];
  }
}

这是我在 index.php 中的表格:

<form class="px-4 py-3" action="login.php" method="post">
    <div class="form-group">
        <label>Username:</label>
        <input type="text" name="post_username" class="form-control" placeholder="Enter username">
        <label class="mt-2">Password:</label>
        <input type="password" name="post_password" class="form-control" placeholder="Password">
      </div>
      <button type="submit" class="btn btn-danger float-right">Login</button>
</form>

login.php 中 fetch_assoc() 的问题在哪里?

【问题讨论】:

标签: php mysqli fetch


【解决方案1】:

你有两个选择。

您可以像这样通过将结果集中的列绑定到变量来处理来自 Statement 对象的结果集,然后使用这些变量输出数据

<?php
include 'db-conn.php';
$post_username = $_POST['post_username'];
$post_password = $_POST['post_password'];

$sql = "SELECT username, password FROM users WHERE username = ? AND password = ?";

$stmt = $conn->prepare($sql);
$stmt->bind_param("ss", $post_username, $post_password);
$stmt->execute();

// bind variables to the resulted values
$stmt->bind_result($u, $p);

while ($row = $stmt->fetch()) {
    echo "Username = $u and Password = $p <br>";
}

或者您可以将语句结果集转换为 mysqli::result 对象并执行您正在执行的操作。

<?php
include 'db-conn.php';
$post_username = $_POST['post_username'];
$post_password = $_POST['post_password'];

$sql = "SELECT username, password FROM users WHERE username = ? AND password = ?";

$stmt = $conn->prepare($sql);
$stmt->bind_param("ss", $post_username, $post_password);
$stmt->execute();

// convert to a result
$result = $stmt->get_result();

while ($row = $result->fetch_assoc()) {
    echo "Username = $row[username] and Password = $row[password] <br>";
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-05
    • 1970-01-01
    • 2014-01-09
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    相关资源
    最近更新 更多