我收到了这个错误:
致电会员功能 非对象上的real_escape_string()
这里是$db
$ db = new mysqli(“127.0.0.1”,“username”,“password”,“sch5400”);
代码:
function readSession($sessionId) {
global $db;
$sessionId = session_id();
// escape session ID
$sessionId = $db->real_escape_string($sessionId);
$time = time();
$result = $db->query("SELECT sessiondata FROM sessions WHERE sessionid='$sessionId' AND expiry > $time");
if ($result->num_rows > 0) {
$row = $result->fetchRow();
return $row['sessiondata'];
}
// return empty string
return "";
}
相对于上面的代码,它出现在第5行。我没有实例化$db
吗?
答案 0 :(得分:14)
可能更好的解决方案是创建一个单例函数:
function get_my_db()
{
static $db;
if (!$db) {
$db = new mysqli("127.0.0.1", "username", "password", "sch5400");
}
return $db;
}
并像
一样使用它$db = get_my_db();
在每个需要db实例的函数中。
答案 1 :(得分:1)
您尚未在显示的代码中的任何位置初始化$db
,并且从错误中听起来它还没有在其他地方(尚未)初始化。
如果要在某处初始化$db
,请在调用 readSession
之前确保它是。在建立连接时也要检查错误消息。它会在出错时返回false
,这不是对象。
,您应该使用这些错误检查方法之一来确保成功建立连接:
/*
* This is the "official" OO way to do it,
* BUT $connect_error was broken until PHP 5.2.9 and 5.3.0.
*/
if ($mysqli->connect_error) {
die('Connect Error (' . $mysqli->connect_errno . ') '
. $mysqli->connect_error);
}
/*
* Use this instead of $connect_error if you need to ensure
* compatibility with PHP versions prior to 5.2.9 and 5.3.0.
*/
if (mysqli_connect_error()) {
die('Connect Error (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}
答案 2 :(得分:0)
还有一个不需要db引用的全局函数。
$sessionId = mysql_real_escape_string($sessionId);