mysqli_result类的对象无法转换为文件中的字符串

时间:2016-02-28 05:51:39

标签: php

我是PHP编程的新手,并决定创建一个登录系统。

以下是我的登录和注册脚本使用的加密文件secure.php

<?php
    $key = "string";

    function loginUser($password, $iv) {
        $password = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $password, MCRYPT_MODE_CBC, $iv);
        return $password;
    }

    function registerUser($password) {
        $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND);
        $password = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $password, MCRYPT_MODE_CBC, $iv);
        return array($password, $iv);
    }
?>

以及我拨打loginUser的文件:

<?php
// ...
    $iv_query = "SELECT iv FROM table WHERE username = '$username'";
    $get_iv = mysqli_query($dbcon, $iv_query);
    $password = loginUser($password, $get_iv);

    $check_user = "SELECT * FROM table WHERE username = '$username' AND password = '$password'";
    $user_query = mysqli_query($dbcon, $check_user);

    if (mysqli_num_rows($user_query)) {
        // ...
    }
?>

函数registerUser有效,但loginUser函数无效。 PHP错误消息显示Catchable fatal error: Object of class mysqli_result could not be converted to string in secure.php on line 5。为什么第 11 行中的代码有效,但行 5 中的代码无效?有什么方法可以解决这个问题吗?当前的注册和登录系统位于yikjin.ga。您可能想尝试注册并使用帐户登录,我将在此问题解决后删除所有帐户。提前谢谢!

2 个答案:

答案 0 :(得分:0)

您正在将mysqli result set object而不是值传递给function loginUser

从结果集中检索值,然后将其传递给function loginUser

$iv_query = "SELECT iv FROM table WHERE username = '$username'";
$rs = mysqli_query($dbcon, $iv_query);
$row - mysqli_fetch_assoc($rs); // Get value from result set
$get_iv = $row['iv'];
$password = loginUser($password, $get_iv);

答案 1 :(得分:0)

mysqli_query将返回对象,而不是字符串

因此,您需要循环才能获取变量。 $iv将成为字符串。

然后传递给函数loginUser

while ($row = mysqli_fetch_array($user_query)) {
    $iv = $row['iv'];
    $password = loginUser($password, $get_iv);
}