2013-11-28 26 views
-2

我是很新,PHP,而我跟随这PHP academy tutorial on a register-login system.从MySQL转换到MySQLi,我如何将一个连接传递给MySQLi内部的函数?

在本教程中,他使用MySQL的功能,如mysql_connectmysql_query,并mysql_real_escape_string

根据建议,我的工作在一个新的项目上,并希望使用mysqli完成相同的用户登录系统。到目前为止,我有两个功能需要一些数据库连接。下面是我的sanitize函数的例子:

<?php 
include ('connect.php'); 

function sanitize($data){ 
    return mysqli_real_escape_string($data); 
} 
?> 

当我尝试运行它,我会得到一个错误,象下面这样:

警告: mysqli_real_escape_string()预计2个参数, 1给出

所以,我可以在连接添加到我的功能是这样的:

<?php 
//include ('connect.php'); 

function sanitize($data){ 
$connection = mysqli_connect('localhost', 'root', 'password', 'array-test'); 
    return mysqli_real_escape_string($connection, $data); 
} 
?> 

哪个工作成功!问题是,我不得不通过包含来传递数据库连接,所以我必须手动将它放在函数中。我将有多个使用数据库连接的功能,如果我重复自己这么多,我必须做错了什么。

到目前为止,我唯一想到的其他解决方法是在我调用函数时在参数中传递连接变量。有点像如下:

<?php 
include ('connect.php'); 

function sanitize($connection, $data){ 
    return mysqli_real_escape_string($connection, $data); 
} 
?> 

我是否错过了什么?如何避免手动将连接变量添加到我创建的每个函数中?

+0

你可以使用'global $ connection'。但这意味着您必须始终为连接使用相同的变量名称。 – Barmar

+0

是的,显然。你缺少这个网站的搜索功能,这个问题已经被问几十次了。 –

+0

更不用说整个“消毒”功能是错误的,并且易于注射。 –

回答

-1

您可以使用全局变量。

function sanitize($data){ 
    global $connection; 
    return mysqli_real_escape_string($connection, $data); 
} 

但是最好只更改代码,以便将连接作为参数传递。这将允许您在必要时使用多个连接。

+0

这样的功能不应该是。 –

+0

谢谢,我认为这就是我最终会做的。我很感谢你的帮助,尤其是因为看起来其他用户更喜欢downvotes而不是帮助。 – user3000310