函数

时间:2015-10-19 17:05:02

标签: php mysql mysqli

我真的需要你的帮助。我已经看到了答案,甚至按照之前发布的建议,但没有解决方案显示如何使用PREPARED STATEMENTS使用获取关联数组,所以我不想提交已经回答的问题。我已经跟随其他问题的建议,但我仍然得到:

  

致命错误:在第75行的/xxx/xxxxxx.php中的非对象上调用成员函数fetch_assoc()

我正在向您展示使用MySQL的旧代码以及我如何使用预处理语句将其更改为MySQLi,但我仍然得到相同的致命错误。有人可以帮助我,我会发疯,我真的需要找出我做错了什么。谢谢你的帮助。

//*******************************************************************
//      OLD CODE: 
//          Called by: $theme=$log->get_theme(); 
//*******************************************************************
class redirect
{
    function __construct()
    {

    }

    function get_theme()
    {
        $rs=mysql_query("select * from theme where status='yes'");
        if(mysql_num_rows($rs)>0)
        {
            $data=mysql_fetch_array($rs);
            return $data['theme_name'];
        }

    }
}

//*********************************************************************
//      OLD CODE: 
//          Called by: $theme=$log->get_theme($cn);
//*********************************************************************

class redirect
{
    public $cn;

    function __construct()
    {

    }
    function get_theme($cn)
    {
        $themeStatus = 'yes';

        if ($stmt = $cn->prepare("SELECT * FROM theme WHERE status = ? "))
            {
                $stmt->bind_param("s", $themeStatus);
                $result = $stmt->execute();
                $stmt->store_result();
                if ($stmt->num_rows >= "1")
                {
                    $data = $result->fetch_assoc();     // ERROR LINE
                    return $data['theme_name'];
                }
            }
        else
            {
                echo "Failed to execute prepared statement: " . mysqli_connect_error();
            }       
    }
}

1 个答案:

答案 0 :(得分:2)

根据定义,mysqli_stmt::execute方法仅返回bool。因此调用$result->any_method_name()将失败,因为$result是一个布尔值。

要使用MySQLi库从预准备语句中获取值,请将目标变量与$stmt->bind_result(...)绑定,然后在while循环中使用$stmt->fetch()以在绑定变量中获取查询结果。然后你从MySQLi切换到PDO,因为它有一个更好的API ...