MySQLi Query准备和检索结果

时间:2014-09-01 10:39:18

标签: php mysql mysqli

我已经经历了相当多的stackoverflow线程,我在准备查询后无法正确检索结果。我尝试了许多不同的解决方案,在执行查询后似乎没有人能够获取关联数组

    $mysqli = new MySQLi('localhost', 'root', '', 'prac2');
    $query = $mysqli-> prepare("SELECT * FROM `user` WHERE username=? and password=?");
    $query-> bind_param('ii', $username, $password);
    if($query-> execute())  {
        $query->store_result();
        if ($query -> num_rows > 0) {
            $result = $mysqli->query($query);
            $r = $result -> fetch_array(MYSQLI_ASSOC)['userid'];
            $_SESSION['userid'] = $r;
        }
    }

我已经确定有时它的结果包含一个成功的布尔值,但我仍然不确定我到底做错了什么。

更新:

好吧bind_param现在可以正常工作了,但是fetch_assoc一直给我错误“在非对象上调用成员函数fetch_assoc()”,我甚至测试结果以确保它返回true。

$mysqli = new MySQLi('localhost', 'root', '', 'prac2');
$query = $mysqli->prepare("SELECT * FROM user WHERE username=? and password=?");
echo $mysqli->error;
$query-> bind_param('ss', $username, $password);
if($query->execute())  {
    $result = $query -> store_result();
    if($result) {
        while($row = $result -> fetch_assoc()){
            echo $row['userid'];
            $_SESSION['userid'] = $row['userid'];
        }
    }
}

2 个答案:

答案 0 :(得分:2)

用户名和密码是字符串,它应该是's',表示相应的变量具有类型字符串。我不知道用户名和密码是如何整数的。 Bind Param Types

   $query-> bind_param('ss', $username, $password);

答案 1 :(得分:0)

对于字符串bind_param,您应该使用s。我的意思是尝试ss而不是ii