在PHP中,按 MySQLi 程序方式执行CRUD操作

分享于 

14分钟阅读

Web开发

  繁體 雙語

介绍

现在,如果没有数据库存储,动态网站就无法想象。 在MySQL数据库中使用PHP时的许多网站。 这里我想指导你完成你应该做什么- 使用php类的MySQLi。

首先介绍一下,我想知道,MySQLi 类函数允许访问MySQL数据库服务器。 Espacially我想说,MySQLi 库是为了使用MySQL版本 4.1.13或者更新,( i ) 代表改进 MySQLi的NAME。 可以在面向对象的方法中使用 MySQLi 函数,但也允许程序使用。

所以在本教程中,我尝试用 MySQLi 程序方式在PHP中展示Create-Read-Update-Delete操作( 基本上它叫做CRUD操作)。 这里你无需从主机手动创建数据库和表。

MySQLi 连接

MySQL服务器允许使用不同的传输层进行连接。 连接使用 tcp/ip,UNIX域套接字或者 Windows 命名管道(Named Pipes)。 主机名localhost绑定到了UNIX域套接字的使用。 无法使用主机名localhost打开 tcp/ip连接必须使用 127.0.0.1.

在 MySQLi 数据库中访问数据之前,我们需要能够连接到服务器。 在这里,我将用户名作为 root 使用密码空白("连接到服务器本地主机上的测试数据库


$hostname = "localhost";


$username = "root";


$passowrd = "";


$database = "test";



//Database connection String


$con=mysqli_connect($hostname,$username,$passowrd);



很明显,数据库 NAME 是可选的,可以省略。 如果省略数据库 NAME,必须确保将表与所有查询中的数据库进行前缀。

如果没有成功连接,我们想检查连接 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创建数据库,而不需要去本地。 我已经使用了数据库 NAME 测试。 根据 sql,如果在localhost中不可以用,则创建数据库"测试",否则将不创建数据库"测试"。


// Assign the database name


$database = "test";



//Create Database query


$sql="CREATE DATABASE IF NOT EXISTS $database";



如果 mysqli_query() 函数在本地数据库中可用,则会创建针对数据库的查询,否则将创建错误,否则会抛出错误,创建数据库。

接下来,我们需要更改 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>";


}



创建表格

现在,使用查询在"测试"数据库中创建表。 你可以使用任何表 NAME,但我使用了表 NAME"人员"。 确保没有选择为 $tablename.的表


// Assign table name


$tablename = "Persons";



在编写查询以创建表之前,请确保需要多少字段,以及每个字段内的数据类型。 这里我创建了一个表 NAME"人员",它有三个字段名字,名字和年龄。 FirstName和LastName都包含字符串数据,字符长度为 30和 Age,其中包含整数数据。


// Create table query


$sql="CREATE TABLE $tablename(FirstName CHAR(30),LastName CHAR(30),Age INT)";



在这里,mysqli_query() 对数据库执行查询,在数据库"测试"中创建表"人员"。 如果成功创建表"人员',则显示"表人员成功创建",否则将引发错误,创建表时出错。


// 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>";


}



嵌入式操作

创建数据库和表之后,我们可以开始在其中添加数据。 为了将数据插入表中,我指定了一个关联 array,它的中 array 索引的表列和值为表列数据。

下面是有关关联 array的值的一些语法规则:

  • 必须引用字符串值
  • 不能引用数值
  • 不能引用NULL空"

FirstName和LastName字段声明为字符串,因此必须引用相应的值,并将Age字段声明为整数,因此它的相应的值必须不被引用。


// Table Column Name and Value to be inserting into the table


$ColumnVal = array("FirstName"=>"MD","LastName"=>'Jamal',"Age"=>30);



下面是调用insert函数的insert函数;第一个是连接字符串( $con ),第二个是表名,第二个是表名,第三个是你在前面的。


// Insert Data from Table


insert($con,$tablename, $ColumnVal);



插入函数的定义如下:


// 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() 引发错误代码并显示错误消息。

删除操作

删除表数据行可以指定一个关联 array,它是要删除哪个表行。 在这里,我使用一个关联的array,它的姓是 Cake,年龄是 32 ;它的意思是删除的数据行是 Cake,年龄是 32. 这里还允许在插入操作部分前面描述的关联 array 中使用相同的语法规则。


//Table Column Name and Value to be delete form the Table


$ColumnVal = array("LastName"=>"Cake","Age"=>32);



现在调用删除函数删除表中的数据行。 这个函数接受3 个参数,即连接字符串( $con ),第二个是执行该操作的表 NAME ( $tablename ),第三个是表的值( $ColumnVal ),第三个是你前面声明的。


//Delete Data from Table


delete($con, $tablename, $ColumnVal);



下面是删除函数的定义,该函数不能返回任何内容,只能执行删除操作。


//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);


 }


}




N.B: 在这个删除函数中,is子句只包含和表达式的限制。

更新操作

要更新表数据行,你需要声明两个关联数组:一个是接受设置操作值的$set array,另一个是接受条件操作值的列字段的$condition array。 这里还允许在插入操作部分前面描述的关联 array 中使用相同的语法规则。


//Set and Condition to be update row in the table


$set = array("LastName"=>'Cake',"Age"=>'27');


$condition = array("FirstName"=>'MD',"Age"=>'34');



现在调用更新函数,该函数接受4 个参数。 第一个是连接字符串变量,第二个是你要执行操作的表 NAME ( $tablename ),第三个是 $set 关联 array,第三个是声明前一个和第四个的$condition 关联 array。


//Update function for the table row


 update($con, $tablename, $set, $condition);



下面是更新函数的定义;这里函数不能执行任何操作,只执行更新操作。


//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);


 }


 }



N.B: 在这个删除函数中,is子句只包含和表达式的限制。

提取操作

To从表中提取数据,可以调用接受函数,接受3 参数,第二个参数是表,第二个是包含值的表,第三个是要获取的列的NAME。


// Call to fetch table column value


$show = fetch($con, $tablename, array("FirstName","LastName","Age"));



下面是获取function函数which获取所有行并将结果集作为关联 array 返回的定义


//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);


}




执行提取函数后,返回一个关联 array,你可以在 print_r() 函数下显示。


// Display data that is fetch 


echo "<pre>";


print_r($show);


echo "</pre>";



关闭连接

尽管PHP在脚本终止时自动关闭了 MySQLi 连接,但是在脚本完成之前,你可以通过调用关闭函数。 这样做是通过 mysqli_close() 函数关闭先前打开的数据库连接完成的。


//Close connection


mysqli_close($con);



结束语

MySQLi 是MySQL数据库服务器的改进版本。 在这个版本的MySQL中,添加了许多安全特性和功能,你可以将它的与PHP一起使用,以便更好地。 我们开始并希望有更好的编码。: )


PHP  PROC  Opera  Operation  CRUD  Procedural  
相关文章