Home > 类库下载 > PHP类库 > php manipulates mysqli database

php manipulates mysqli database

高洛峰
Release: 2019-02-23 15:06:27
Original
1369 people have browsed it

Mysql(i) support has been added since php5.0, and the new functions are added in the form of objects

i means improved functions, high efficiency, and stability

Recommended related mysql video tutorials: "mysql Tutorial

Compile time parameters:

./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
Copy after login

Due to copyright issues, starting from php5.3, php started to use mysqlnd instead of libmysql.dll

mysqlnd is a mysql database driver developed by zend company, which is better than the original in all aspects Improve

#Use mysqlnd to compile

./configure --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd 加上你的参数
Copy after login

mysqli. The process and object methods support the three classes provided by

mysqli:

   1、mysqli 和连接相关的
   2、MySQLi_Result 处理结果集
   3、mysqli_stmt 预处理类
Copy after login

#Set character set
set_charset

#Get character set
character_set_name

Get the database object

//创建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');
Copy after login

query: Failure returns false, select successfully returns the result set object, others return true and not false, which means that the SQL execution is successful

No result set example

$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);
Copy after login

With result set

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

Execute multiple statements at one time multiquery ( Not recommended)

 There is no result set, at this time affected_rows can only get the number of the last affected row

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

There is a result set

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

Transaction processing:

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

mysqli_stmt:mysqli preprocessing class (recommended): Represents a prepared statement. The server only compiles the sql once

The same function can be achieved with mysqli and mysqli_result

Advantages: High efficiency, suitable for situations where the statements are the same but the data is different, and can prevent the occurrence of sql injection

mysqli_stmt example: non-select statement

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

}//最后id
ee($stmt->insert_id);//影响的行数 注:最后一条执行的
ee($stmt->affected_rows);//错误号
ee($stmt->errno);//错误信息
ee($stmt->error);//stmt对象中可以看到更多的信息
ee($stmt);

eee($mysqli);
Copy after login

mysqli_stmt example: select statement 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 = "select * from limove where id							
Copy after login

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template