您的位置:

深入理解php mysqli_query函数

随着web应用的不断发展,php语言也越来越广泛地应用在web开发中。在php中,mysqli_query函数是十分常用的一个函数,它主要用于执行SQL语句。那么在使用mysqli_query函数时,我们需要注意哪些问题呢?这就是本文所要详细阐述的问题。

一、mysqli_query函数的参数

mysqli_query函数的语法格式如下:

mysqli_query(connection,query,resultmode);

其中,它有三个参数:

connection:必须,表示MySQL连接句柄,在使用mysqli_connect()或mysqli_init()函数后返回的对象。

query:必须,表示要执行的SQL语句,可以包含插入、更新、删除、查询等操作。

resultmode:可选,在默认情况下返回结果集作为关联数组(MYSQLI_ASSOC)、数字数组(MYSQLI_NUM)或同时使用两者(MYSQLI_BOTH)。如果只想返回行的统计数或受影响行的数量 ,则传递MYSQLI_USE_RESULT或MYSQLI_STORE_RESULT。

二、mysqli_query函数的返回值

mysqli_query函数执行查询成功返回mysqli_result对象,执行插入操作、删除操作和更新操作成功返回true,执行失败返回false,同时mysqli_query还可以用mysqli_affected_rows和mysqli_insert_id函数来获取影响的行数和插入的自增长id。

1. 返回mysqli_result对象

$conn = mysqli_connect("localhost", "user", "password", "example");
$result = mysqli_query($conn,"SELECT * FROM user where sex=1"); 

返回的$result就是mysqli_result对象。

2. 返回true

$conn = mysqli_connect("localhost", "user", "password", "example");
$sql = "INSERT INTO user (name,age,sex)VALUES('tony',25,1)";
$result=mysqli_query($conn,$sql);
if($result){
    echo "插入成功!";
}else{
    echo "插入失败!";
}

执行成功则返回true,失败则返回false。

3. 返回false

$conn = mysqli_connect("localhost", "user", "password", "example");
$sql = "INSERT INTO user (name,age,sex,created_at)VALUES('tony',25,1)";
$result=mysqli_query($conn,$sql);
if($result){
    echo "插入成功!";
}else{
    echo "插入失败!";
}

当执行的SQL语句有问题时,如INSERT INTO user (name,age,sex,created_at)VALUES('tony',25,1),缺少了created_at字段,这时返回false。

三、mysqli_query函数的安全性

当我们使用mysqli_query函数时,需要考虑到安全性问题。为了防止SQL注入,我们需要对输入的参数进行过滤和检查。

1. 对输入参数进行过滤

$name = mysqli_real_escape_string($conn,$_POST['name']);
$age = intval($_POST['age']);
$sex = intval($_POST['sex']);
$sql = "INSERT INTO user (name,age,sex)VALUES('$name','$age','$sex')";
$result=mysqli_query($conn,$sql);

在上面的示例中,我们使用mysqli_real_escape_string()函数对$name进行了过滤,避免了SQL注入的风险。

2. 对输入数据进行检查

$age = intval($_POST['age']);
$sex = intval($_POST['sex']);
if($age < 0 || $age > 120){
    echo "年龄不合法!";
    exit;
}
if($sex != 0 && $sex != 1){
    echo "性别不合法!";
    exit;
}
$name = mysqli_real_escape_string($conn,$_POST['name']);
$sql = "INSERT INTO user (name,age,sex)VALUES('$name','$age','$sex')";
$result=mysqli_query($conn,$sql);

在上面的示例中,我们使用intval函数将$age和$sex转成了整型,并进行了合法性检查,避免了非法输入。这样即使有人想通过特殊字符攻击也不行了。

四、mysqli_query函数的使用注意事项

1. mysqli_query函数不支持批量查询

如果需要批量执行SQL语句,可以使用mysqli_multi_query函数来实现,同时需要注意处理每一个查询的结果。

2. mysqli_query函数需要与mysqli_fetch_系列函数一起使用

mysqli_query函数执行后,需要使用mysqli_fetch_系列函数来获取查询的结果,一般情况下使用mysqli_fetch_array或mysqli_fetch_assoc函数即可。

总结

本文从mysqli_query函数的参数、返回值、安全性和注意事项四个方面进行了详细的阐述。在使用mysqli_query函数时,我们需要对参数进行合法性校验和注入攻击过滤,同时需要注意mysqli_query函数的使用场景。只有掌握了mysqli_query函数的使用规则,我们才能更好地应对web开发中的各种数据库操作。