随着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开发中的各种数据库操作。