尝试使用stmt从选项中获取值->;bind_result;导致致命错误(内存不足)


Trying to get values from options using stmt->bind_result; causing fatal error (out of memory)

正如标题所说,我正试图使用mysqli fetch stmt从数据库中获取meta_keys和meta_values。我得到的错误是说内存不足,并在我的代码中引用了这一行:

//Bind result variables
$select_stmt->bind_result($id, $key, $value);

我真的不确定我做错了什么,这就是整个功能。我的目标是调用另一个文件中的函数,并传递我想要检索其meta_value的userID和选项(meta_key)。

function get_options($userid, $option) {
    global $mysqli;

    $query = "SELECT user_id, meta_key, meta_value FROM user_settings WHERE user_id = ? AND meta_key = ? LIMIT 4";
    if($select_stmt = $mysqli->prepare($query)) {
        $select_stmt->bind_param('ss', $userid, $option);
        //Execute the prepared statement
        $select_stmt->execute();
        //Bind result variables
        $select_stmt->bind_result($id, $key, $value);
        //Fetch the values
        while ($select_stmt->fetch()) {
            printf($key, $value);
        }
    }
}

我明白了,以下是对我有效的方法,希望它能帮助其他人:

function get_options($userid, $option) {
    global $mysqli;
    if ($select_stmt = $mysqli->prepare("SELECT user_id, meta_key, meta_value, salt 
          FROM user_settings 
          WHERE user_id = ? AND meta_key = ?")) {
        $select_stmt->bind_param('ss', $userid, $option);
        $select_stmt->execute();   // Execute the prepared query.
        $select_stmt->store_result();
        // Execute the prepared query.
        if (! $select_stmt->execute()) {
            echo 'Could not perform option query on database';
        }
        // If the user exists get variables from result.
        $select_stmt->bind_result($userID, $key, $value, $salt);
        $select_stmt->fetch();
        echo ' ID is '.$userID.'<br />';
        echo ' Key is '.$key.'<br />';
        echo ' Value is '.$value.'<br />';
        echo ' Salt is '.$salt.'<br />';

    } //end if($select_stmt) 

}

在上面的内容中,您将看到我在绑定结果之前添加了store_result,并在绑定结果之后添加了fetch属性。