Blogger Information
Blog 6
fans 0
comment 0
visits 4272
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP mysqli 操作数据库
littler_two的博客
Original
514 people have browsed it

由于mysql连接方式被废除,据说在php7中要使用mysql_connect()还需要额外下载组件。
使用mysqli有面向过程和面向对象两种方式。
mysqli提供了三个类:

mysqli 连接相关的

mysqli_result 处理结果集

mysqli_stmt 预处理类

数据库连接

<?php$db_host = 'localhost';
$db_name = 'test';
$db_user = 'root';
$db_pwd = '';
//面向对象方式
$mysqli = new mysqli($db_host, $db_user, $db_pwd, $db_name);
//面向对象的昂视屏蔽了连接产生的错误,需要通过函数来判断
if(mysqli_connect_error()){    
    echo mysqli_connect_error();
}
//设置编码
$mysqli->set_charset("utf8");
//或者 
$mysqli->query("set names 'utf8'")
//关闭连接
$mysqli->close();
//面向过程方式的连接方式
$mysqli = mysqli_connect($db_host, $db_user, $db_pwd, $db_name);
//判断是否连接成功if(!$mysqli ){    
echo mysqli_connect_error();
}
//关闭连接
mysqli_close($mysqli);
?>

数据库查询

通用:执行sql语句都可用query(sql),执行失败会返回false,select成功则返回结果集对象,其他返回true,只要不是false就说明sql语句执行成功了。

<?php
//无结果集示例
$sql = "insert into table_name (`name`, `address`) 
        values 
        ('xiaoming', 'adddddrrreess')";
$result = $mysqli->query($sql);
//或者
$sql = "delete from table_name where name='xiaoming'";
$result = $mysqli->query($sql);if($result === false){    echo $mysqli->error;    echo $mysqli->errno;
}
//影响条数
echo $mysqli->num_rows;
//插入的
idecho $mysqli->insert_id;
$mysqli->close();

有结果集

<?php
$sql = "select * from table_name";
$result = $mysqli->query($sql);
if($result === false){
    //执行失败    
    echo $mysqli->error;
    echo $mysqli->errno;
}
//行数
echo $result->num_rows;
//列数 字段数
echo $result->field_count;
//获取字段信息
$field_info_arr = $result->fetch_fields();
//移动记录指针
$result->data_seek(1);
//0 为重置指针到起始
//获取数据
while($row = $result->fetch_assoc()){    
    echo $row['name'];
    echo $row['address'];
}
    //也可一次性获取所有数据
    $result->data_seek(0);
    //如果前面有移动指针则需重置
    $data = $result->fetch_all(MYSQLI_ASSOC);
    $mysqli->close();


预处理示例

预处理能有效的防止sql注入的产生,mysqli_stmt是预处理类

<?php$sql = "insert inro table_name ('name','address') values (?,?)";//获得预处理对象$stmt = $mysqli->prepare($sql);//绑定参数 第一个参数为绑定的数据类型/*
i:integer 整型
d:double 浮点型
s:string 字符串
b:a blob packets blob数据包
*/$name = "xiaoming";
$address = "adddressss";
$stmt->bind_param("ss", $name, $address);//绑定时使用变量绑定//执行预处理$stmt->execute();/*
//可重新绑定 多次执行
$stmt->bind_param("ss", $name, $address);
$stmt->execute();
*///插入的id 多次插入为最后idecho $stmt->insert_id;//影响行数 也是最后一次执行的echo $stmt->affected_rows;//错误号echo $stmt->errno;//错误信息echo $stmt->error;//关闭$stmt->close();
$mysqli->close();

下面示例select的预处理

//注释部分省略$sql = "select * from table_name where id<?";
$stmt = $mysqli->prepare($sql);
$id = 30;
$stmt->bind_param("i", $id);
$stmt->execute();//获取结果集$result = $stmt->get_result();//结果集取后的操作就和之前一样了//获取所有数据$data = $result->fetch_all(MYSQLI_ASSOC);
$result->close();
$mysqli->close();

一次执行多条sql语句multiquery(不推荐),执行结果不是结果集,affectd_rows是最后影响的条数

<?php$sql_arr = array(    "insert into table_name (`name`,`address`) values ('xiaoming','a')",    "insert into table_name (`name`,`address`) values ('xiaohong','a')",    'delete from table_name where id=23',
);
$sql = implode(';', $sql_arr);
$result = $mysqli->multi_query($sql);if($result === false){    echo $mysqli->error;
}
$mysqli->close();


Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post