【PHP】PHP连接MySQL数据库

说明

  • PHP 连接 MySQL ,通常使用 MySQLi 或 PDO 扩展,由于 MySQLi 更加简单,所以这里只使用MySQLi。
  • MySQLi 连接数据库有面向对象面向过程这两种方式,而面向对象更加直观,所以这里只使用面向对象的方式。

1、创建连接

$conn = new mysqli("主机地址", "用户名", "密码" [, "数据库名" ]); 

if ($conn->connect_error) { 
die("连接失败,原因:". $conn->connect_error); 
}

echo "连接成功";

$conn->close();  // 最后要记得关闭连接

注意

  • 数据库名是可选的,如果不填写数据库名,也可以在后面利用SQL语句 use 数据库名 切换到对应数据库

2、执行SQL语句

$sql = "SQL语句"; 
if ($conn->query($sql) === TRUE)
	echo "执行成功";  
else 
	echo "执行失败,原因:" . $con->error; 

3、执行SQL查询语句

$sql = "SQL查询语句";
$result = $conn->query($sql);  // $result为查询结果集

说明

获得查询结果主要有三种方法:

  • $result -> fetch_all():取出所有数据,每行是一个普通数组,只能通过index访问
  • $result -> fetch_row():取出一行,作为普通数组,只能通过index访问,如果为空结果为FALSE
  • $result -> fetch_assoc():取出一行,作为关联数组,只能通过key访问,如果为空结果为FALSE
$sql = "SQL查询语句";
$result = $conn->query($sql);  // $result为查询结果集


// fetch_all 方法
$list = $result->fetch_all();
foreach($list as $row){
    echo "${row[0]} ${row[1]} ${row[2]}<br>";
}


// fetch_row 方法
while($row = $result->fetch_row()){
    echo "${row[0]} ${row[1]} ${row[2]}<br>";
}


// fetch_assoc 方法
while($row = $result->fetch_assoc()){
    echo "${row['name']} ${row['age']} ${row['grade']}<br>";
}

补充

  • $result->num_rows:结果集行数
  • $result->field_count:结果集列数

4、预处理语句

预处理语句可以防止SQL注入,使操作SQL更加安全。

使用预处理语句插入数据

// 预处理 
$statement = $conn->prepare("INSERT INTO tab (name, age, grade) VALUES (?, ?, ?)");

// 绑定参数,被绑定的变量在之前不需要声明
$statement->bind_param("sii", $name, $age, $grade);
/*
 第一个参数代表了后面被绑定变量的类型,与后面的变量一一对应
 如:
 	- s 代表 string,与$name对应
 	- i 代表 integer,与$age对应
 	- i 代表 integer,与$grade对应
*/


 
// 执行
$name = "小明";
$age = 12;
$grade = 98;
$statement->execute();

$statement->close(); // 最后,要关闭statement

参数类型:

  • i - integer
  • d - double
  • s - string
  • b - BLOB(binary large object)

使用预处理语句查询数据

$grade = 60;
$statement = $conn->prepare("SELECT * FROM tab WHERE grade >= ?");
$statement->bind_param("i", $grade);

// 绑定结果集
$statement->bind_result($Name, $Age ,$Grade);

$statement->execute();

while($statement->fetch()){
    echo "$Name :$Grade <br>"
}

// 释放结果集
$statement->free_result(); 
$statement->close();

5、示例

如图,在数据库“test”下有一张表“tab”
在这里插入图片描述
表“tab”的数据如下所示:
在这里插入图片描述

$conn = new mysqli("localhost", "root", "" , "test");

// 设置编码为 UTF-8
$conn->query("set names 'utf8'");   

// 插入一条数据
$statement = $conn->prepare("INSERT INTO tab (name, age, grade) VALUES (?, ?, ?)");
$statement->bind_param("sii", $name, $age, $grade);
$name = "小亮";
$age = 12;
$grade = 60;
$statement->execute();
$statement->close();

// 查询数据
$sName = "小亮";
$statement2=$conn->prepare("SELECT * FROM tab WHERE name = ?");
$statement2->bind_param("s", $sName);
$statement2->bind_result($rName, $rAge ,$rGrade);
$statement2->execute();

$statement2->fetch();

echo "$rName $rAge $rGrade<br>";

$statement2->free_result();
$statement2->close();


// 关闭连接
$conn->close();  

结果:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_34802028/article/details/107628229