Mysql(i) 지원은 php5.0부터 추가되었으며, 새로운 기능이 객체 형태로 추가되었습니다
기능이 향상되고 효율성이 향상되고 안정성이 향상되었음을 의미합니다
추천 mysql 비디오 튜토리얼: "mysql 튜토리얼"
컴파일 시간 매개변수:
./configure --with-mysql=/usr/bin/mysql_config \ #使用 Mysql ClientLibrary(libmysql)构建 --with-mysqli=mysqlnd \ #使用 Mysql Native Dirver 即mysqlnd --with-pdo-mysql=mysqlnd #使用 Mysql Native Dirver 即mysqlnd
저작권 문제로 인해 php5.3부터 PHP는 libmysql.dll을 대체하기 위해 mysqlnd를 사용하기 시작했습니다
mysqlnd는 zend 사에서 개발한 mysql 데이터베이스 드라이버로 원본과 비교하면 모든 면에서 개선되었습니다
#컴파일하기 mysqlnd
./configure --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd 加上你的参数
mysqli 프로세스 및 개체 모드는
mysqli:
1、mysqli 和连接相关的 2、MySQLi_Result 处理结果集 3、mysqli_stmt 预处理类
#Set 문자 집합
set_charset
character_set_name
//创建mysqli对象方式 1 //屏蔽连接产生的错误$mysqli = new mysqli('127.0.0.1', 'root', '', 'test');//只能用函数来判断是否连接成功if(mysqli_connect_errno()) { echo mysqli_connect_error(); }//创建mysqli对象方式 2 可以设置一些参数$mysqli = mysqli_init();$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 2);//设置超时时间$mysqli->real_connect('127.0.0.1', 'root', '', 'test');쿼리: 실패 시 false를 반환하고, 선택은 결과 집합 개체를 성공적으로 반환합니다. , false가 아닌 경우 true를 반환하며, 이는 sql 실행이 성공한 것입니다결과 집합 없음 예
$mysqli = mysqli_init();$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 2);//设置超时时间$mysqli->real_connect('127.0.0.1', 'root', '', 'test');$sql = "insert into limove(`name`, `order`) values('aa', 11)";$rst = $mysqli->query($sql);$sql = "delete from limove where id = 221";$rst = $mysqli->query($sql);if($rst === false) { ee($mysqli->errno); ee($mysqli->error); }#影响条数 ee($mysqli->affected_rows);#插入的id ee($mysqli->insert_id); ee($mysqli);결과 집합 있음
$mysqli = mysqli_init();$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 2);//设置超时时间$mysqli->real_connect('127.0.0.1', 'root', '', 'test');$sql = "select * from limove as limove_as";$result = $mysqli->query($sql);if($result === false) { ee($mysqli->errno); ee($mysqli->error); }#行数 ee($result->num_rows);#列数 ee($result->field_count);#字段个数 ee($result->field_count);#获取所有字段的信息$field_arr = $result->fetch_fields();#移动字段的指针 // $result->field_seek(1);#依次获取字段的信息while($field = $result->fetch_field()) { ee($field); }#移动记录指针$result->data_seek(1);#一次获取所有数据$data = $result->fetch_all(MYSQLI_ASSOC);#关联数组方式获取结果集$data = array();$result->data_seek(0); #重置指针到起始while($row = $result->fetch_assoc()) { $data[] = $row; } ee($data);$result->free();$mysqli->close();여러 문 실행 한 번에 다중 쿼리(권장하지 않음) 결과 집합이 없습니다. 현재는 Affected_rows는 마지막으로 영향을 받은 행의 번호만 가져올 수 있습니다.
$mysqli = mysqli_init();$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 2);//设置超时时间$mysqli->real_connect('127.0.0.1', 'root', '', 'test');$sql_arr = array( 'insert into limove(id,`name`, `order`) values(null, 1, 2)', 'insert into limove(id,`name`, `order`) values(null, 1, 222)', 'delete from limove where `order` = 2', );$sql = implode(';', $sql_arr);$result = $mysqli->multi_query($sql);if($result === false) { ee($mysqli->errno); ee($mysqli->error); }$mysqli->close();결과 집합이 있습니다
$mysqli = mysqli_init();$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 2);//设置超时时间$mysqli->real_connect('127.0.0.1', 'root', '', 'test');$sql_arr = array( 'show tables', 'desc select * from limove', 'show create table limove', );$sql = implode(';', $sql_arr);$rst = $mysqli->multi_query($sql);if($rst === false) { ee($mysqli->errno); ee($mysqli->error); }do{ $result = $mysqli->store_result();#获取当前光标所在的结果集 $data = $result->fetch_all(); ee($data); }while($mysqli->next_result());#光标移动到下一个结果集$mysqli->close();트랜잭션 처리:
$mysqli=new mysqli("localhost", "root", "123456", "xsphpdb"); //事务处理 $mysqli->autocommit(0); $error=true; $price=50; $sql="update zh set ye=ye-{$price} where name='zhangsan'"; $result=$mysqli->query($sql); if(!$result){ $error=false; echo "从张三转出失败 "; }else{ if($mysqli->affected_rows==0){ $error=false; echo "张三的钱没有变化"; }else{ echo "从张三账号中转出成功! "; } } $sql="update zh set ye=ye+{$price} where name='lisi1'"; $result=$mysqli->query($sql); if(!$result){ $error=false; echo "从李四转入失败 "; }else{ if($mysqli->affected_rows==0){ $error=false; echo "李四的钱没有变化"; }else{ echo "向李四账号中转入成功! "; } } if($error){ echo "转账成功!"; $mysqli->commit(); }else{ echo "转账失败!"; $mysqli->rollback(); } $mysqli->autocommit(1); $mysqli->close();mysqli_stmt:mysqli 전처리 클래스(권장): 준비된 명령문을 나타내며, 서버는 SQL을 한 번만 컴파일합니다.동일한 기능은 다음과 같습니다. mysqli 및 mysqli_result를 사용하여 달성