>类库下载 >PHP类库 >PHP가 mysqli 데이터베이스를 조작합니다.

PHP가 mysqli 데이터베이스를 조작합니다.

高洛峰
高洛峰원래의
2016-10-10 09:59:381343검색

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를 사용하여 달성

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

관련 기사

더보기