对数据库执行一条SQL语句:
(1) mixed:mysqli_query(mysqli $link, string $query, int $resultmode=MYSQLI_STORE_RESULT);
1)对于insert,update,delete等不会返回数据的SQL语句,在执行没有错误时返回true
2)对于返回数据的SQL语句执行成功的时间会返回结果集对象,可以使用操作结果集对象的函数获取数据
3)第三个参数决定了mysqli client和sever之间取结果集的方式 :
1. MYSQLI_STORE_RESULT
第三个默认是MYSQLI_STORE_RESULT模式或省略不填,表示具体的结果集一次性返回给客户端
用函数取值的时候相当于在本地取数据
2. MYSQLI_USE_RESULT
客户端使用一条条取数据的函数,一次次来MySQL这边取,这种模式不怎么用,在返回数据量特别大的时候用
用函数取值的时候相当于在服务器端取数据
注意:如果使用MYSQLI_USE_RESULT模式则必须在获取完所有的结果才可以使用该函数
$result=mysqli_query($link, $query,MYSQLI_USE_RESULT);
var_dump(mysqli_fetch_row($result));
var_dump(mysqli_fetch_row($result));
var_dump(mysqli_fetch_row($result));
/* mysqli_num_rows()函数在MYSQLI_USE_RESULT模式下获取不到记录有多少行
* 因为MYSQLI_USE_RESULT模式表示数据都在MySQL服务器端不在PHP端,
*/
var_dump(mysqli_num_rows($result));
(2)bool:mysqli_real_query(mysqli $link, string $query);
也可以使用本函数对数据执行一条SQL语句,返回结果为布尔值,不返回结果集
适用于只需返回布尔值,判断有没有执行成功的需求
如果想获取结果集可以使用mysqli_store_result( )获取结果集对象
$query='select * from t1';
if (mysqli_real_query($link,$query)){
var_dump(mysqli_store_result($link));
}
(3)如果在执行SQL语句的时候发生错误,以上两个函数都将返回false,并且可以使用以下函数处理错误原因
int:mysqli_errno(mysqli $link);
string:mysqli_error(mysqli $link);
$query="insert into t2(info) values('ROBIN')"; //t2不存在
if (mysqli_query($link,$query)){
//各种需要的操作
}
else{
var_dump(mysqli_errno($link));
var_dump(mysqli_error($link));
}
//string 'Table 'd14.t2' doesn't exist' (length=28)