使用 MySqli 过程式方法在 PHP 中进行 CRUD 操作
使用 PHP 中的 MySQLi 过程式方法进行创建-读取-更新-删除 (CRUD) 操作
引言
如今,动态网站离不开数据库存储。许多网站在 PHP 中使用 MySQL 数据库。在这里,我想指导您完成应该做的事情——使用 PHP 的 MySQLi 类。
首先,我想告诉您,MySQLi 类函数允许访问 MySQL 数据库服务器。特别是,我想说的是,MySQLi 库是为了支持 MySQL 版本 4.1.13 或更新版本而设计的,其中 (i) 代表“改进”,是 MySQLi 名称的含义。MySQLi 函数可以以面向对象的方式与 PHP 一起使用,但它也允许过程化使用。
因此,在本教程中,我将演示如何使用 PHP 中的 MySQLi 过程化方式执行创建-读取-更新-删除操作(通常称为 CRUD 操作)。在这里,您无需手动创建数据库和表。
MySQLi 连接
MySQL 服务器允许使用不同的传输层进行连接。连接使用 TCP/IP、UNIX 域套接字或 Windows 命名管道。主机名 localhost 绑定到 UNIX 域套接字的使用。无法使用主机名 localhost 打开 TCP/IP 连接,您必须改用 127.0.0.1。
在访问 MySQLi 数据库中的数据之前,我们需要能够连接到服务器。我在这里使用用户名 **root**,密码 **空("")**,连接到服务器 **localhost** 上的 **test** 数据库。
$hostname = "localhost";
$username = "root";
$passowrd = "";
$database = "test";
//Database connection String
$con=mysqli_connect($hostname,$username,$passowrd);
显然,数据库名称是可选的,可以省略。如果您省略数据库名称,则必须确保在所有查询中都使用数据库前缀来引用您的表。
在这里,我们要检查 MySQLi 连接,如果未成功连接,则会抛出错误,否则会显示“成功连接到 MySQLi”。
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
echo "<br>";
}
else{
echo "Successfully connected to MySQL...<br>";
}
创建数据库
在这里,我们需要使用 SQL 创建数据库,而无需访问 localhost。我使用了数据库名称 **test**。根据 SQL,如果 localhost 中不存在名为“test”的数据库,则会创建它,否则不会创建。
// Assign the database name
$database = "test";
//Create Database query
$sql="CREATE DATABASE IF NOT EXISTS $database";
通过 `mysqli_query()` 函数执行针对数据库“test”的查询,如果该名称在 localhost 中可用,则会创建它,否则会抛出错误“创建数据库时出错”。
接下来,如果数据库“test”成功创建,我们需要使用 `mysqli_select_db()` 函数更改连接的默认数据库。
// Check and Create database if not exists
if (mysqli_query($con,$sql)) {
echo "Database $database connected successfully<br>";
mysqli_select_db($con,$database);
} else {
echo "Error connecting database: " . mysqli_error($con);
echo "<br>";
}
创建表
现在是时候在“test”数据库中使用查询创建表了。您可以使用任何表名,但我使用了表名“Person”。请确保您选择的表名 $tablename 不存在。
// Assign table name
$tablename = "Persons";
在编写创建表的查询之前,请确保需要多少个字段以及每个字段将包含什么类型的数据。我在这里创建了一个名为“Person”的表,它有三个字段:FirstName、LastName 和 Age。FirstName 和 LastName 都包含字符长度为 30 的字符串数据,而 Age 字段包含整数数据。
// Create table query
$sql="CREATE TABLE $tablename(FirstName CHAR(30),LastName CHAR(30),Age INT)";
在这里,`mysqli_query()` 函数执行针对数据库的查询,以在数据库“test”中创建表“Person”。如果表“Person”成功创建,则显示“表 person 创建成功”,否则抛出错误“创建表时出错”。
// Check and Execute query
if (mysqli_query($con,$sql)) {
echo "Table persons created successfully<br>";
} else {
echo "Error creating table: " . mysqli_error($con);
echo "<br>";
}
插入操作
在创建数据库和表之后,我们可以开始向其中添加数据。要将数据插入表中,我分配了一个关联数组,其中数组索引是表列,值是表列的数据。
以下是关联数组值需要遵循的一些语法规则:
- 字符串值必须加引号
- 数值必须不加引号
- 单词 NULL 必须不加引号
由于 FirstName 和 LastName 字段声明为字符串,因此其相应值必须加引号,而 Age 字段声明为整数,因此其相应值必须不加引号。
// Table Column Name and Value to be inserting into the table
$ColumnVal = array("FirstName"=>"MD","LastName"=>'Jamal',"Age"=>30);
现在是时候调用 insert 函数了,它接受三个参数:第一个是连接字符串 ($con),第二个是表名 ($tablename),第三个是您之前声明的表列值的关联数组 ($ColumnVal)。
// Insert Data from Table
insert($con,$tablename, $ColumnVal);
insert 函数的定义如下:
// Insert Data within table by accepting TableName and Table column => Data as associative array
function insert($connection, $tblname, array $val_cols){
$keysString = implode(", ", array_keys($val_cols));
// print key and value for the array
$i=0;
foreach($val_cols as $key=>$value) {
$StValue[$i] = "'".$value."'";
$i++;
}
$StValues = implode(", ",$StValue);
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
if(mysqli_query($connection,"INSERT INTO $tblname ($keysString) VALUES ($StValues)"))
{
echo "Successfully Inserted data<br>";
}
else{
echo "Data not Inserted";
}
}
在这里,如果连接 MySQLi 失败,`mysqli_connect_errno()` 会抛出错误代码并显示错误消息。
删除操作
要删除表数据行,您可以分配一个关联数组来指定要删除的表行。例如,我在这里使用一个关联数组,其中 LastName 是 Cake,Age 是 32;这意味着删除 LastName 是 Cake 且 Age 是 32 的数据行。这里允许对关联数组使用与插入操作部分前面描述的相同的语法规则。
//Table Column Name and Value to be delete form the Table
$ColumnVal = array("LastName"=>"Cake","Age"=>32);
现在是时候调用 delete 函数来删除表中的数据行了。此函数接受三个参数:一个是连接字符串 ($con),第二个是要执行此操作的表名 ($tablename),第三个是您之前声明的列值 ($ColumnVal)。
//Delete Data from Table
delete($con, $tablename, $ColumnVal);
以下是 delete 函数的定义,它不返回任何内容,只执行删除操作。
//Delete data form table; Accepting Table Name and Keys=>Values as associative array
function delete($connection, $tblname, array $val_cols){
$i=0;
foreach($val_cols as $key=>$value) {
$exp[$i] = $key." = '".$value."'";
$i++;
}
$Stexp = implode(" AND ",$exp);
if(mysqli_query($connection,"DELETE FROM $tblname WHERE $Stexp")){
if(mysqli_affected_rows($connection)){
echo "Data has been deleted successfully<br>";
}
else{
echo "The data you want to delete is no loger exists<br>";
}
}
else{
echo "Error deleting data: " . mysqli_error($connection);
}
}
注意:此 delete 函数有一个限制,即 SQL 查询的 WHERE 子句仅包含 AND 表达式。
更新操作
要更新表数据行,您需要声明两个关联数组:一个是 $set 数组,它接受列字段的 set 操作值;另一个是 $condition 数组,它接受列字段的条件操作值。这里允许对关联数组使用与插入操作部分前面描述的相同的语法规则。
//Set and Condition to be update row in the table
$set = array("LastName"=>'Cake',"Age"=>'27');
$condition = array("FirstName"=>'MD',"Age"=>'34');
现在是时候调用 update 函数了,它接受四个参数。第一个是连接字符串变量 ($con),第二个是要在其上执行操作的表名 ($tablename),第三个是您之前声明的 $set 关联数组,第四个是您之前也声明的 $condition 关联数组。
//Update function for the table row
update($con, $tablename, $set, $condition);
以下是 update 函数的定义;此函数不执行任何操作,只执行更新操作。
//Update data within table; Accepting Table Name and Keys=>Values as associative array
function update($connection, $tblname, array $set_val_cols, array $cod_val_cols){
$i=0;
foreach($set_val_cols as $key=>$value) {
$set[$i] = $key." = '".$value."'";
$i++;
}
$Stset = implode(", ",$set);
$i=0;
foreach($cod_val_cols as $key=>$value) {
$cod[$i] = $key." = '".$value."'";
$i++;
}
$Stcod = implode(" AND ",$cod);
if(mysqli_query($connection,"UPDATE $tblname SET $Stset WHERE $Stcod")){
if(mysqli_affected_rows($connection)){
echo "Data updated successfully<br>";
}
else{
echo "The data you want to updated is no loger exists<br>";
}
}
else{
echo "Error updating record: " . mysqli_error($conn);
}
}
注意:此 delete 函数有一个限制,即 SQL 查询的 WHERE 子句仅包含 AND 表达式。
获取操作
要从表中获取数据,您可以调用 fetch 函数,它接受三个参数:第一个是连接字符串变量 ($con),第二个是要在其上执行此操作的表名 ($tablename),第三个是一个包含您要获取其值的列名的数组。
// Call to fetch table column value
$show = fetch($con ,$tablename, array("FirstName","LastName","Age"));
以下是 fetch 函数的定义,它获取所有行并将结果集作为关联数组返回。
//Fetch data by accepting table name and columns(1 dimentional array) name
function fetch($connection, $table, array $columns){
$columns = implode(",",$columns);
$result = mysqli_query($connection, "SELECT $columns FROM $table");
if(mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
//return tow dimentional array as required columns result
return mysqli_fetch_all($result,MYSQLI_ASSOC);
}
执行 fetch 函数后,将返回一个关联数组,您可以在 `print_r()` 函数下显示它。
// Display data that is fetch
echo "<pre>";
print_r($show);
echo "</pre>";
关闭连接
尽管 PHP 在脚本终止时会自动关闭您的 mysqli 连接,但如果您想在脚本完成之前关闭连接,只需调用 close 函数即可。这是通过调用 `mysqli_close()` 函数实现的,该函数用于关闭先前打开的数据库连接。
//Close connection
mysqli_close($con);
结论
MySQLi 是 MySQL 数据库服务器的改进版本。此版本的 MySQL 添加了许多安全功能和函数,您可以将其与 PHP 一起用于更好的 Web 存储数据库。那么,让我们开始吧,并期待更好的编码……:)