如何在函数中识别mysqli实例?

时间:2014-09-15 09:14:32

标签: mysql mysqli

我正在从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无注入的方式访问它?

ps我知道我需要转到准备好的陈述,但这只是为了让我能够了解mysqli基础知识。

干杯

2 个答案:

答案 0 :(得分:1)

原始解决方案将global $mysqli;作为您函数的第一行。但正如hsan所写,请阅读有关PHP变量范围

的内容

答案 1 :(得分:1)

将变量设为全局是不好的做法。单例模式解决了在整个应用程序生命周期中需要共享一个对象实例的问题。考虑使用Singleton。