>  기사  >  백엔드 개발  >  PHP를 사용하여 mysqli 데이터베이스를 조작하는 방법

PHP를 사용하여 mysqli 데이터베이스를 조작하는 방법

墨辰丷
墨辰丷원래의
2018-06-01 11:09:401722검색

이 글은 주로 PHP에서 mysqli 데이터베이스를 조작하는 방법을 소개하고 있으니 관심있는 친구들이 참고하시면 좋을 것 같습니다.

Mysql(i) 지원은 php5.0부터 추가되었으며, 새로운 기능이 객체 형태로 추가되었습니다.

i는 향상된 기능, 고효율 및 안정성을 의미합니다.

컴파일 시간 매개변수:

./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_stm 전처리하지 않음 class

#Settings 문자 집합
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');

query: 실패 시 false를 반환하고, select는 결과 집합 개체를 성공적으로 반환하고, 다음을 반환합니다. 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();

한 번에 여러 문 실행 다중 쿼리(권장하지 않음)

결과 집합이 없습니다. 현재는 영향을 받은_행이 마지막으로 영향을 받은 항목의 수만 가져올 수 있습니다.

$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();

트랜잭션 처리:

rr 리

mysqli 전처리 클래스(권장): 서버는 sql을 한 번만 컴파일합니다.

장점: 높은 효율성에 적합합니다. 문은 동일하지만 데이터가 다른 상황은 SQL 주입 생성을 방지할 수 있습니다.

mysqli_stmt 예: 비select 문

$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 예: select 문 1

require 'fns.php';

//创建mysqli对象方式 
$mysqli = @new mysqli('127.0.0.1', 'root', '', 'test');

//只能用函数来判断是否连接成功
if(mysqli_connect_errno())
{
  echo mysqli_connect_error();
  die;
}

$mysqli->set_charset('utf8');

$sql = "insert into limove values(?, ?, ?)"; //语句一样值不相同情况



//mysqli中有直接的方法可用
$stmt = $mysqli->prepare($sql);

//绑定参数
$stmt->bind_param('iss', $id, $name, $order);

for($i=0;$i<5;$i++){
  $id = 0;
  $name = &#39;name&#39;;
  $order = mt_rand(1, 1000);
  $stmt->execute();

}

//最后id
ee($stmt->insert_id);

//影响的行数 注:最后一条执行的
ee($stmt->affected_rows);

//错误号
ee($stmt->errno);

//错误信息
ee($stmt->error);

//stmt对象中可以看到更多的信息
ee($stmt);

eee($mysqli);

요약: 위 내용은 이 글의 전체 내용입니다. 학습하는 모든 분들에게 도움이 되길 바랍니다.

관련 권장사항:

1주일 이내에 자동 로그인 저장 메커니즘을 구현하려면

php를 사용하세요.

PHP 사용자 확인 및 라벨 추천을 간단하게 사용합니다.


php을 사용하여 서버와 웹 만들기 프런트엔드 인터페이스 Interact

위 내용은 PHP를 사용하여 mysqli 데이터베이스를 조작하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.