我真的需要你的帮助。我已经看到了答案,甚至按照之前发布的建议,但没有解决方案显示如何使用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();
}
}
}
答案 0 :(得分:2)
根据定义,mysqli_stmt::execute方法仅返回bool。因此调用$result->any_method_name()
将失败,因为$result
是一个布尔值。
要使用MySQLi库从预准备语句中获取值,请将目标变量与$stmt->bind_result(...)
绑定,然后在while循环中使用$stmt->fetch()
以在绑定变量中获取查询结果。然后你从MySQLi切换到PDO,因为它有一个更好的API ...