使用mysqli创建用户定义的函数是一种好的做法和安全的方法吗?

时间:2015-07-09 16:08:37

标签: php mysql mysqli

我试图将我的项目从mysql更改为mysqli。我有我的数据库连接:

$link = mysqli_connect($hostname, $username, $password, $database);
if(mysqli_connect_errno()) {
    echo "Opps! Connection could not be established: ", mysqli_connect_error();
    exit();
}

然后我有一个用户定义的函数:

function get_name($id) {
    $query = mysqli_query($link, "select name from staff where id='$id'");
    $result = mysqli_fetch_assoc($query);
    return $data = $result['name'];
}

据我所知,我必须声明$ link为全局(如下所示)才能正常工作。

function get_name($id) {
    global $link;
    $query = mysqli_query($link, "select name from staff where id='$id'");
    $result = mysqli_fetch_assoc($query);
    return $data = $result['name'];
}

我的问题是:这是一个好的做法,是否安全?

2 个答案:

答案 0 :(得分:1)

我不一定认为编写具有这种特定目的的函数是好的或坏的做法,只是符合您的需求。如果您计划在整个代码中的多个位置执行此确切任务,则函数可以使您的代码更易于阅读并避免重复自己。

就安全性而言,您需要在查询中使用它们之前清理输入。对于整数$id字段的情况,您可以简单地将其转换为整数$id = (int)$id;。对于其他数据类型,您可能希望使用$id = mysqli_real_escape_string($link, $id);来转义它。那你就安全了。

我还建议您调查PDO而不是mysqli。我相信这些日子更常用。

答案 1 :(得分:1)

从字面上看,这个问题没什么意义。用户定义的函数几乎总是很好的做法,无论你是将它们与mysqli或任何其他API一起使用。然而,功能一般与安全无关。

在谈到提供的代码时,由于缺乏准备好的声明,因此不安全。

因此,为了使您的代码正确,您必须创建函数来首先处理带参数的mysqli查询。然后在你自己的帮助函数中使用这些函数,使它们看起来像这样:

function get_name($id) {
    return dbgetOne("select name from staff where id=?",[$id]);
}

正如您所看到的,它不仅可以确保您的查询安全,还可以缩短您的代码。