집 >데이터 베이스 >MySQL 튜토리얼 >PHP 데이터베이스 확장 mysqli 자세한 사용법 튜토리얼
Mysqli는 데이터베이스와 상호 작용하기 위해 객체 지향과 프로세스 지향의 두 가지 방법을 각각 제공합니다.
추천 mysql 동영상 튜토리얼: "mysql 튜토리얼"
1. 객체 지향
객체 지향 접근 방식에서 mysqli는 클래스로 캡슐화하여 구성하는 방법은 다음과 같습니다.
__construct ([ string $host [, string $username [, string $passwd [, string $dbname[, int $port [, string $socket ]]]]]] )
위 구문에 포함된 매개변수에 대한 설명은 다음과 같습니다.
host: 연결된 서버 주소입니다.
username: 데이터베이스에 연결하기 위한 사용자 이름입니다. 기본값은 서버 프로세스 소유자의 사용자 이름입니다.
passwd: 데이터베이스에 연결하기 위한 비밀번호, 기본값은 비어 있습니다.
dbname: 연결된 데이터베이스의 이름입니다.
포트: TCP 포트 번호입니다.
소켓: UNIX 도메인 소켓.
MySQL과의 연결을 설정하려면 다음 코드와 같은 생성 메서드를 통해 mysqli 클래스를 인스턴스화할 수 있습니다.
<?php $db_host="localhost"; //连接的服务器地址 $db_user="root"; //连接数据库的用户名 $db_psw="root"; //连接数据库的密码 $db_name="sunyang"; //连接的数据库名称 $mysqli=new mysqli($db_host,$db_user,$db_psw,$db_name); ?>
Mysqli는 연결을 위한 멤버 메서드 connect()도 제공합니다. MySQL에. 빈 생성자를 사용하여 mysqli 클래스를 인스턴스화하는 경우 mysqli 객체와 함께 connect() 메서드를 호출하면 MySQL에 연결할 수도 있습니다. 예를 들어 다음 코드는 다음과 같습니다.
<?php $db_host="localhost"; //连接的服务器地址 $db_user="root"; //连接数据库的用户名 $db_psw="root"; //连接数据库的密码 $db_name="sunyang"; //连接的数据库名称 $mysqli=new mysqli(); $mysqli->connect($db_host,$db_user,$db_psw,$db_name); ?>
MySQL 서버와의 연결을 닫고 mysqli 객체로 호출하면 close() 메소드로 충분합니다. 예:
$mysqli->close();
2. 프로세스 지향
프로세스 지향 접근 방식에서 mysqli 확장은 다음 기능을 제공합니다. mysqli_connect()는 MySQL과의 연결을 설정합니다. 이 함수의 구문 형식은 다음과 같습니다.
mysqli mysqli_connect ([ string $host [, string $username [, string $passwd[, string $dbname [, int $port [, string $socket ]]]]]] )
mysqli_connect() 함수의 사용법은 다음의 mysql_connect() 함수의 사용법과 매우 유사합니다. mysql 확장명 다음은 mysqli_connect() 함수 사용 예입니다.
<?php $connection = mysqli_connect("localhost","root","root","sunyang"); if ( $connection ) { echo "数据库连接成功"; }else { echo "数据库连接失败"; } ?>
mysqli_close() 함수를 사용하여 MySQL 서버와의 연결을 닫습니다. 예:
mysqli_close();
3. mysqli를 사용하여 데이터에 액세스
mysqli를 사용하여 데이터에 액세스하는 방법에는 객체 지향과 프로세스 지향이 있습니다. 이 섹션에서는 객체 지향 방법을 사용하는 방법만 설명합니다. MySQL과 상호 작용합니다. mysqli 확장의 프로세스 지향 방법은 여기에서 자세히 소개되지 않습니다. 관심 있는 독자는 관련 정보를 얻기 위해 공식 문서를 참조할 수 있습니다.
mysqli에서는 query() 메소드를 사용하여 쿼리를 실행한다. 이 메소드의 구문 형식은 다음과 같다.
mixed query ( string $query [, int $resultmode ] )
위 구문에 관련된 매개변수는 다음과 같다. :
query: SQL 문을 서버로 보냈습니다.
resultmode: 이 매개변수는 두 개의 값을 허용합니다. 하나는 결과가 버퍼링된 세트로 반환됨을 나타내는 MYSQLI_STORE_RESULT이고, 다른 하나는 결과가 버퍼링되지 않은 세트로 반환됨을 나타내는 MYSQLI_USE_RESULT입니다.
다음은 query() 메소드를 사용하여 쿼리를 실행하는 예입니다.
query($query); if ($result) { if($result->num_rows>0){ //判断结果集中行的数目是否大于0 while($row =$result->fetch_array() ){ //循环输出结果集中的记录 echo ($row[0])."
"; echo ($row[1])."
"; echo ($row[2])."
"; echo ($row[3])."
"; echo "
"; } } }else { echo "查询失败"; } $result->free(); $mysqli->close(); ?>
위 코드에서 num_rows는 결과 세트의 속성으로, 갯수를 반환합니다. 결과 집합의 행. fetch_array() 메서드는 결과 집합의 레코드를 배열에 넣고 반환합니다. 마지막으로 free() 메서드를 사용하여 결과 집합의 메모리를 해제하고 close() 메서드를 사용하여 데이터베이스 연결을 닫습니다.
기록 삭제(delete), 기록 저장(insert), 기록 수정(update) 작업도 query() 메소드를 사용하여 수행됩니다.
query($query); if ($result){ echo "删除操作执行成功"; }else { echo "删除操作执行失败"; } $mysqli->close(); ?>
레코드 저장(삽입)과 레코드 수정(업데이트) 작업은 레코드 삭제(삭제) 작업과 유사합니다.
4. 준비된 문
PHP에서는 준비된 문을 쿼리하려면 prepare() 메서드를 사용하고 준비된 문을 실행하면 성능이 향상됩니다. 진술. PHP에는 두 가지 유형의 준비된 명령문이 있습니다. 하나는 결과를 바인딩하는 것이고 다른 하나는 매개 변수를 바인딩하는 것입니다.
(1) 바인딩 결과
바인딩 결과는 PHP 스크립트의 사용자 정의 변수를 결과 세트의 해당 필드에 바인딩하는 것입니다. 결과 바인딩을 위한 샘플 코드는 다음과 같습니다.
prepare($query); //进行预准备语句查询 $result->execute(); //执行预准备语句 $result->bind_result($id,$number,$name,$age); //绑定结果 while ($result->fetch()) { echo $id; echo $number; echo $name; echo $age; } $result->close(); //关闭预准备语句 $mysqli->close(); //关闭连接 ?>
결과를 바인딩할 때 스크립트의 변수는 결과 집합의 필드와 일대일로 대응해야 합니다. 바인딩 후에는 fetch( ) 메소드 to 결과 세트에 바인딩된 변수를 하나씩 꺼내고 최종적으로 전처리와 데이터베이스 연결이 각각 닫힙니다.
(2) 바인딩 매개변수
바인딩 매개변수는 PHP 스크립트의 사용자 정의 변수를 SQL 문의 매개변수에 바인딩하는 것입니다(매개변수는 "?"로 대체됨). 매개변수를 지정하려면, 이 메소드의 구문 형식은 다음과 같습니다.
bool bind_param ( string $types , mixed &$var1 [, mixed &$... ] )
위 구문에 관련된 매개변수는 다음과 같습니다.
유형: 허용되는 문자 유형은 다음 표에 표시된 대로 4를 포함합니다(매개변수 유형과 바인딩된 변수가 허용하는 문자 유형은 일대일로 대응해야 합니다). -하나).
var1: 바인딩된 변수의 수는 SQL 문의 매개변수 수와 일치해야 합니다.
매개변수 바인딩 샘플 코드는 다음과 같습니다.
prepare($query); $result->bind_param("ssi",$number,$name,$age); //绑定参数 $number='sy0807'; $name='employee7'; $age=20; $result->execute(); //执行预准备语句 $result->close(); $mysqli->close(); ?>
스크립트에서 매개변수와 바인딩 결과를 동시에 바인딩할 수도 있습니다.
prepare($query); $result->bind_param("i",$emp_id); //绑定参数 $emp_id=4; $result->execute(); $result->bind_result($id,$number,$name,$age); //绑定结果 while ($result->fetch()) { echo $id."
"; echo $number."
"; echo $name."
"; echo $age."
"; } $result->close(); $mysqli->close(); ?>
5. 다중 쿼리
MySQL 확장에서는 다중 쿼리를 연속적으로 실행할 수 있는 multi_query() 메서드를 제공합니다. 이 메서드의 구문 형식은 다음과 같습니다.
bool mysqli_multi_query ( mysqli $link , string $query )
여러 쿼리를 실행할 경우 마지막 쿼리문을 제외한 각 쿼리문은 ";"로 구분해야 합니다. 다중 쿼리를 실행하는 샘플 코드는 다음과 같습니다.
$mysqli=new mysqli("localhost","root","root","sunyang"); //实例化mysqli $query = "select emp_name from employee ;"; $query .= "select dep_name from depment "; if ($mysqli->multi_query($query)) { //执行多个查询 do { if ($result = $mysqli->store_result()) { while ($row = $result->fetch_row()) { echo $row[0]; echo "
"; } $result->close(); } if ($mysqli->more_results()) { echo ("-----------------
"); //连个查询之间的分割线 } } while ($mysqli->next_result()); } $mysqli->close();//关闭连接 ?>
在上述代码中,store_result()方法用于获得一个缓冲结果集; fetch_row()方法的作用类似于fetch_array()方法;more_results()方法用于从一个多查询中检查是否还有更多的查询结果;next_result()方法用于从一个多查询中准备下一个查询结果。
6、事务操作
首先只有数据库中表的类型为InnoDB时,才支持事务提交,建议使用InnoDB,更建议使用mysqli扩展库了,不仅因为mysqli支持多条sql查询,更是因为它的速度、性能、安全更可靠,而且完全面向对象,当然也可以是面向过程操作。
看下面mysqli对事务操作的php代码:
query("set names utf8"); if ($mysqli->connect_error){ die("连接错误:".$mysqli->connect_error); } //将事务提交设为false $mysqli->autocommit(false); $sql = "insert into `user` values(null,'小红',md5(123),'321321')"; $sql2 = "insert into `user` values(null,'小王',md5(321),'dasf')"; //执行操作,返回的是bool值 $query = $mysqli->query($sql); $query2 = $mysqli->query($sql2); if ($query && $query2){ $mysqli->commit(); echo "操作成功"; }else{ echo "操作失败".$mysqli->error; $mysqli->rollback(); } $mysqli->autocommit(true); $mysqli->close(); ?>