一、mysql(面向过程)

该连接方式也叫 Original MySQL,PHP4版本的MYSQL扩展,从PHP5起已经被废弃,并别从PHP7开始已经被移除。

在php5版本之前,一般是用php的mysql函数去驱动mysql数据库的,比如mysql_query()的函数,属于面向过程。

mysql是非持继连接函数,mysql每次链接都会打开一个连接的进程。

<?php
$conn=mysql_connect('localhost','user','password');//连接mysql数据库
mysql_select_db('data_base',$conn);//选择数据库
$result = mysql_query('select * from data_base');//第二个可选参数,指定打开的连接
$row = mysql_fetch_row($result);//只取一行数据
echo $row[0]; //输出第一个字段的值
?>

二、MySQLi (面向对象)

MySQLi extension ("i" 意为 improved),即MySQL增强扩展,在php5版本以后,增加了mysqli的函数功能,某种意义上讲,它是mysql系统函数的增强版,更稳定更高效更安全,与mysql_query()对应的有mysqli_query(),属于面向对象,用对象的方式操作驱动mysql数据库。

mysqli是永远连接函数,mysqli多次运行mysqli将使用同一连接进程,从而减少了服务器的开销。mysqli封装了诸如事务等一些高级操作,同时封装了DB操作过程中的很多可用的方法。

Linux 和 Windows: 在 php5 mysql 包安装时 MySQLi 扩展多数情况下是自动安装的。可以通过 phpinfo() 查看是否安装成功:

FASTAPI MYSQL连接 mysql连接php_FASTAPI MYSQL连接

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$database = "db";
 
// 创建连接
$conn = new mysqli($servername, $username, $password, $database);
 
// 检测连接
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
} 
echo "连接成功";
$result = $conn->query('select name from sys_user');
$row = $result->fetch_assoc(); //只取一行数据
echo $row['name'];
?>

三、MySQLi (面向过程)

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$database = "db";
 
// 创建连接
$conn = mysqli_connect($servername, $username, $password,$database);
 
// 检测连接
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
echo "连接成功";
$result = mysqli_query($conn,'select name from sys_user');//第二个可选参数,指定打开的连接
$row = mysqli_fetch_assoc($result); //只取一行数据
echo $row['name']; //输出第一个字段的值
?>

四、PDO (PHP Data Objects)

PDO 应用在 12 种不同数据库中, MySQLi 只针对 MySQL 数据库。

所以,如果你的项目需要在多种数据库中切换,建议使用 PDO ,这样你只需要修改连接字符串和部分查询语句即可。 使用 MySQLi, 如果不同数据库,你需要重新编写所有代码,包括查询。

可以通过 phpinfo() 查看是否安装成功:

FASTAPI MYSQL连接 mysql连接php_FASTAPI MYSQL连接_02

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "db";
 
try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    echo "连接成功"; 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $stmt = $conn->prepare("SELECT id, firstname, lastname FROM MyGuests"); 
    $stmt->execute();
 
    // 设置结果集为关联数组
    $result = $stmt->setFetchMode(PDO::FETCH_ASSOC); 
    foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) { 
        echo $v;
    }
}
catch(PDOException $e)
{
    echo $e->getMessage();
}
?>

五、其他需要说明的情况

(1)Class 'mysqli' not found问题

首先检查php.ini中的extension_dir 地址是不是指向了php目录的ext目录下,如:extension_dir = "D:/Program Files/php-7.2.10/ext",一定要用全路径。(这个地方设置不好,所有的php扩展都不起作用)

其次检查php.ini中mysqli的extension是否打开(去掉前面的分号),去掉extension=php_mysqli.dll前面的分号。