PHP基础(13)使用mysqli操作MySQL数据库

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP基础(13)使用mysqli操作MySQL数据库相关的知识,希望对你有一定的参考价值。

mysqli提供了两种接口操作数据库MySQL

  1. 面向过程

2.  面向对象

<?php
/*面向过程*/
$mysqli = mysqli_connect("localhost", "root", "123456", "mydb");
if (mysqli_connect_errno($mysqli)) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$res = mysqli_query($mysqli, "select * from mytb");
$row = mysqli_fetch_assoc($res);
echo $row[‘_msg‘];


/*面向对象 建议使用第二种*/
$mysqli = new mysqli("localhost", "root", "123456", "mydb");
if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: " . $mysqli->connect_error;
}

$res = $mysqli->query("select * from mytb");
while($row = $res->fetch_assoc()){
    echo $row["id"]." ".$row["age"]." ".$row["name"]."\n";
}
?>

为了统一,下面仅仅使用面向对象的方式进行讲解。

mysqli支持持久连接persistent connection,持久连接在使用完后不会关闭,而是放到连接池,如果一个请求使用与上次相同的主机名,密码,端口,数据库的话,则会继续使用连接池中的连接,而不是重新新建一个连接。


mysqli->query(statements)会将得到的数据结果缓存到客户端的内存中,以备使用。

mysqli->real_query("SELECT id FROM test ORDER BY id ASC");结果仍然在mysql server上以备client读取,而不会立即缓存到客户端,PHP占用内存变小,但是MYSQL服务器的压力变大。


查询得到的数据默认都是字符串,除非设定MYSQLI_OPT_INT_AND_FLOAT_NATIVE选项

$mysqli->options(MYSQLI_OPT_INT_AND_FLOAT_NATIVE1);这样得到的数据会自动根据数据库中数据的类型来来讲数据转化。

<?php
$mysqli = new mysqli("localhost", "root", "123456", "mydb");
$mysqli->options(MYSQLI_OPT_INT_AND_FLOAT_NATIVE,1);//设定自动转换
if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: " . $mysqli->connect_error;
}

$res = $mysqli->query("select * from mytb");
while($row = $res->fetch_assoc()){
    echo $row["id"].gettype($row["id"]);//数字类型
}


 Mysql数据库支持预编译的sql语句,这样sql语句接受参数,而且实现相同sql语句的高效执行。

预编译语句的执行包括两个阶段1.预编译  2.绑定参数 并且执行

<?php
$mysqli = new mysqli("localhost", "root", "123456", "mydb");
$mysqli->options(MYSQLI_OPT_INT_AND_FLOAT_NATIVE,1);
if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: " . $mysqli->connect_error;
}
if($stmt = $mysqli->prepare("insert into mytb(id,age,name)values(?,?,?)")){/*预编译*/
  $id = 4;
  $age = 28;
  $name = "shit";
  $stmt->bind_param("iis",$id,$age,$name);/*绑定参数*/
}
if($stmt->execute()){/*执行*/
    echo "success!";
}

注意:不同于非预编译执行的语句,预编译语句执行的返回结果会会自动将数据类型转化为数据库中正确的类型(而非全是字符串)。


本文出自 “厚积薄发” 博客,请务必保留此出处http://joedlut.blog.51cto.com/6570198/1855943

以上是关于PHP基础(13)使用mysqli操作MySQL数据库的主要内容,如果未能解决你的问题,请参考以下文章

PHP使用mysqli扩展库实现增删改查(面向对象版)

13-1 在PHP中使用mysqli与MySQL交互

php mysqli扩展之预处理

php基础编程-php连接mysql数据库-mysqli的简单使用

mysql,mysqli和PDO的区别

PHP(14)使用mysqli操作MySQL