PHP和MYSQL

138 阅读2分钟

MySQL

PHP连接MySQL需要确保开启了 PHP 中的mysqli扩展

开启mysqli扩展:将php.ini配置文件中extension=mysqli(php7)或extension=php_mysqli.dll(php5)一项的注释去掉


连接

mysqli_connect()可以实现 MySQL 数据库的连接

mysqli_connect (
    ?string $hostname = null, 
    ?string $username = null, 
    ?string $password = null, 
    ?string $database = null, 
    ?int $port = null, 
    ?string $socket = null
): mysqli|false|null
  • $hostname:数据库地址
  • $username:数据库用户
  • $password:数据库密码
  • $database:待连接的数据库
  • $port:数据库端口
  • $socket:指定需要使用的连接管道或socket套接字

$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');
$mysqli->set_charset('utf8mb4');

库切换

mysqli_select_db()可以实现对数据库的选择

mysqli_select_db (mysqli $mysql, string $database): bool; // 面向过程写法
$mysqli::select_db() // 面向对象写法

$mysql:数据库连接对象 $database:切换的数据库


执行

mysqli_query()执行sql语句,增删改查都可以

mysqli_query (
    mysqli $mysql, 
    string $query, 
    int $result_mode = MYSQLI_STORE_RESULT): mysqli_result|bool// 面向过程写法
$mysqli::query() // 面向对象写法
  • $link:数据库连接
  • $query:要执行的 SQL 语句
  • $resultmode:可选参数,用来修改函数的行为。可以是下列值的任意一个
    • MYSQLI_USE_RESULT:如果需要查询大量数据,使用这个
    • MYSQLI_STORE_RESULT:默认值

函数执行失败时会返回FALSE

通过mysqli_query成功执行SELECTSHOWDESCRIBEEXPLAIN查询时则会返回一个mysqli_result对象

其他查询执行成功则返回TRUE


比如执行一条插入语句

$conn = new mysqli($servername, $username, $password, $dbname);  // 创建连接  
if ($conn->connect_error) {  // 检测连接  
	// 连接失败
} else {
	$sql = "INSERT INTO ...')";  
    if ($conn -> query($sql) === TRUE) {  
        // 成功
    } else {  
		echo $conn -> error; // 失败
    }
	$conn-> close();      
}


获取

  • mysqli_fetch_row():从结果集中取得一行,并以索引数组的形式返回,一次调用取得一行,可以不停调用逐行获取数据
mysqli_fetch_row (mysqli_result $result): array|false|null {}
$link = mysqli_connect('localhost', 'root', 'root', 'test');
$sql = "select * from user;";
$query = mysqli_query($link, $sql);
$data = mysqli_fetch_row($query);
Array
(
    [0] => 张三
    [1]  => 男
    [2]  => 12
)
  • mysqli_fetch_assoc():从结果集中取得一行,并以关联数组的形式返回
mysqli_fetch_assoc (mysqli_result $result): array|null|false {}
Array
(
    [name] => 张三
    [sex]  => 男
    [age]  => 12
)
  • mysqli_fetch_array():从结果集中取得一行,并以关联数组、索引数组或二者兼有的形式返回
mysqli_fetch_array (mysqli_result $result, int $mode = MYSQLI_BOTH): array|false|null {}
Array
(
    [0] => 张三
    [name] => 张三
    [1]  => 男
    [sex]  => 男
    [2]  => 12
    [age]  => 12
)
  • mysqli_fetch_all():从结果集中取得所有行,并以关联数组、索引数组或二者兼有的形式返回
mysqli_fetch_all (mysqli_result $result, int $mode = MYSQLI_NUM): array {}
Array
(
 	[0] =>  Array (
        [0] => 张三
        [name] => 张三
        [1]  => 男
        [sex]  => 男
        [2]  => 12
        [age]  => 12
    )
    ....
)
  • mysqli_fetch_object():从结果集中取得一行,并以对象的形式返回
mysqli_fetch_object (mysqli_result $result, string $class = 'stdClass', array $constructor_args = array()): object|null|false {}
Object ( 
    [name] => 张三
    [sex]  => 男
    [age]  => 12
)

常用的操作流程

// 面向对象写法
$mysql = new Mysqli($host, $username, $password);
$mysql -> select_db($dbname); // 切换数据库
$result = $mysql -> query($sql); // 执行sql
$data = $result -> fetch_all(); // 获取数据
$mysql -> close(); // 关闭连接
// 面向过程写法
$link = mysqli_connect($host, $username, $password);
$result = mysqli_query($link, $sql); // 执行sql
$data = mysqli_fetch_all($result); // 获取数据
mysqli_close($link) // 关闭连接

行数

可以通过mysqli_num_rows获取到查询的结果行数

mysqli_num_rows (mysqli_result $result): string|int;
$mysqli -> num_rows;
$link = mysqli_connect('localhost', 'root', 'root', 'test');
$sql = "select * from user;";
$query = mysqli_query($link, $sql);
$data = mysqli_num_rows($query);
print_r($data);