我正在从mysql升级到mysqli。
我所有的mysql代码都是过程性的,现在我想转换为OOP,因为大多数在线的mysqli示例都在OOP中。
我遇到的问题是,使用mysql,一旦我建立了连接,我就不必将该连接注入任何函数中,作为函数中可以访问mysql的参数。
这是我的旧连接代码:
$location = "localhost";
$user = "rogerRamjet";
$pass = "bestPassInTheWorld";
$dbName = "myDBName";
$link = mysql_connect($location, $user, $pass);
if (!$link) {
die("Could not connect to the database.");
}
mysql_select_db("$dbName") or die ("no database");
还有一个示例函数,它可以访问mysql连接,而不需要向函数中注入$link:
function getUser($data)
{
$data=mysql_real_escape_string($data);
$error = array('status'=>false,'userID'=>-1);
$query = "SELECT `user_id`, `user_email` FROM `myTable` WHERE `data`='$data'";
if ($result = mysql_query($query))
{
$row = mysql_fetch_array($result, MYSQL_ASSOC);
if ($row['user_id']!="")
{
return array( 'status'=>true, 'userID'=>$row['user_id'], 'email'=>$row['user_email'] );
}
else return $error;
}
else return $error;
}
这是我的新mysqli连接:
$mysqli=new MySQLi($location, $user, $pass, $dbName);
所以,要升级上述功能中的第一行,我需要:
$data = $mysqli->real_escape_string($data);
但这引发了一个错误:
Undefined variable: mysqli
这是否意味着,对于任何需要访问$mysqli的函数,我都需要将$mysqli作为参数注入其中,或者有没有一种方法可以像mysql那样在不注入的情况下访问它?
我知道我需要转向准备好的语句,但这只是为了让我能够了解mysqli的基本知识。
将变量设为全局变量是一种糟糕的做法。singleton模式解决了在整个应用程序生命周期中需要共享一个对象实例的问题。考虑使用Singleton。
粗溶液将是global $mysqli;
,作为函数的第一行。但是,正如hsan所写的,阅读关于PHP变量范围