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