php - 无法使用准备好的对象语句从 mysql 获取多行数据

标签 php prepared-statement mysqli

$sql = $conn->prepare("SELECT username, email FROM users WHERE username=? OR email = ?");
$sql->bind_param('ss', $uname, $email);
$sql->execute();
$result = $sql->get_result();
$row = $result->fetch_array(MYSQLI_ASSOC);

if ($row['username'] == $uname) {
    echo "Username not availabe try different";
} elseif ($row['email'] == $email) {
    echo "email is already taken diiferent";
} else {
    $stmt = $conn->prepare("INSERT INTO users (username, email, pass, created) VALUES (?, ?, ?, ?)");
    $stmt->bind_param('ssss', $username, $email, $pass, $created);
    if ($stmt->execute()) {
        echo "Registrated sucessfully. Login Now!";
    } else {
        echo "Something went wrong. Please try again";
    }
}

该代码未运行。我不知道为什么。 如果我获取单行,那么它可以工作,但对于多行,它不起作用。

在这里,我想使用准备好的语句验证用户名和电子邮件是否已存在于数据库中。

最佳答案

最后,经过 3-4 小时的练习,我在这篇堆栈溢出文章的帮助下解决了这个问题:call-to-undefined-method-mysqli-stmtget-result

如果有人因 native 驱动程序而遇到同样的问题,请参阅本文。 这是对我有用的解决方案,如下所示:首先定义此函数

function fetchAssocStatement($stmt)
{
    if($stmt->num_rows>0)
    {
        $result = array();
        $md = $stmt->result_metadata();
        $params = array();
        while($field = $md->fetch_field()) {
            $params[] = &$result[$field->name];
        }
        call_user_func_array(array($stmt, 'bind_result'), $params);
        if($stmt->fetch())
            return $result;
    }

    return null;
}

正如您所看到的,它创建了一个数组并使用行数据获取它,因为它在内部使用 $stmt->fetch() ,您可以像调用 一样调用它mysqli_result::fetch_assoc (只需确保 $stmt 对象已打开并且结果已存储)。现在调用上面的函数:-

//mysqliConnection is your mysqli connection object
if($stmt = $mysqli_connection->prepare($query))
{
    $stmt->execute();
    $stmt->store_result();

    while($assoc_array = fetchAssocStatement($stmt))
    {
        //do your magic
    }

    $stmt->close();
}

关于php - 无法使用准备好的对象语句从 mysql 获取多行数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54490703/

相关文章:

php - php插入mysql时出错

php - 是否有更短的方法来指定要运行哪个类?

sql - 问号在 SQL 查询中代表什么?

php - 表已经是 utf8 字符集,仍然在某些字符中出现问号

php - Laravel 5 : the move() function doesn't save the uploaded image file

php - MYSQL错误获取准备语句

java - 结果集总是返回空,我不应该在准备好的语句上使用executeQuery()吗?

php - 使用MySQL验证的php中的登录表单

php - 用 PHP 比较两个不同的 mysqli_fetch_array 的结果

php - 将 MySQLi 安装到 MAMP