php调用mysql数据库常用操作
一、连接数据库
连接数据库的作用相当于进入数据库服务器的授权,没有获得授权将无法对数据库进行操作。
连接方法
**示例代码**
<?php
$conn=mysqli_connect("数据库服务器地址","登录用户名","登录密码","选择数据库");
if(mysqli_connect_error($conn))
die("数据库连接失败");
mysqli_set_charset($conn,"utf8");
?>
数据库服务器地址可以是IP地址、域名或局域网内的设备名;
mysqli_connect函数是php5以上自带函数之一,可直接调用。此函数将返回一个连接mysql数据库服务器的对象,一般将其存储在一个变量中。示例代码将其存储于$conn,该变量将在后续操作数据库的过程中作为授权凭证。
mysqli_connect_error函数用于验证数据库服务器连接有效性,如果连接成功将返回false,反之如果数据库服务器地址或登录用户名密码不正确将导致连接失败,返回true。如果连接失败,后续对数据库的调用都将失败,因此要及时终止程序运行,提示检查数据库连接。
连接成功就可以对数据库进行调用了。
mysqli_set_charset函数用于设置传输字符集,一般设置为utf8。如果字符集不统一,将导致显示乱码。
在此函数可以初见php调用mysql数据库的一般方法为:
函数(连接对象,参数);
连接对象即之前创建的连接凭证,存储在$conn变量中。
根据要使用不同的功能,也将使用不同的函数,但整体格式都是如此。
每一次对mysql数据库进行操作,都需要携带连接对象。也就是说,但凡要进行数据库操作,都需要运行示例代码。为了减少重复的工作,一般将示例代码提前写好放在一个单独的文件中,在需要操作数据库时,直接使用include函数包含该文件即可直接调用。
文件mysql.inc.php内容为示例代码;
调用方法
<?php
include(mysql.inc.php);
...
?>
include函数可直接将目标文件加载到当前文件,include(mysql.inc.php)这一段可等价于示例代码在此处。
至此,mysql数据库连接操作已完成。
二、操作数据库
mysql数据库从上倒下的结构一般为服务器、数据库、表。用通俗的语言讲,就是一个服务器可以有多个数据库,一个数据库可以有多个表。
php操作数据库一般仅限于表这一层次,服务器、数据库这两层的操作一般使用更加专业的客户端软件来进行操作。
甚至在表这一层次,创建表、删除表、字段更改等功能都不推荐使用php来操作,尽管php具备这些能力。一来容易出错,二来有更加专业的数据库管理软件提供可视化操作更加高效,第三,这些功能使用频率较低,且具有一定危险性。
剥离掉一些非常用的,php常用操作数据库的功能一般为:查询、插入、删除、更改这四个操作。操作时须使用对应的SQL语句。
php执行SQL函数
mysqli_query(连接对象,SQL语句)
一般将SQL语句作为字符串储存在一个变量中,编辑起来更加清晰。
**示例代码**
<?php
include(mysql.inc.php);
$sql="SQL语句";
$result=mysqli_query($conn,$sql);
...
?>
此函数针对插入、删除、更改将返回true或者false。因此针对插入、删除、更改操作,只需判断其返回值“$result”即可确认操作是否成功。
if ($result=true)
echo "success";
else
echo "failure";
查询语句的操作则完全不同。因为执行查询语句不仅仅是要得知是否查询成功,还要将查询的结果导出。因此当执行查询语句时,mysqli_query函数的返回值是一个查询结果的对象,需要配合其他函数将该对象有序输出。
mysqli_fetch_array(查询结果对象,参数)
此函数中的参数为
MYSQLI_ASSOC、MYSQLI_NUM、MYSQLI_BOTH,三种用法也不同,下面结合一个具体表查询操作来说明。
示例表:extable
参数MYSQLI_ASSOC将会把查询结果以关联字段名称的数组输出。
<?php
include(mysql.inc.php);//获得连接凭证
$sql="SELECT * FROM extable";
$result=mysqli_query($conn,$sql);//执行查询语句
$row=mysqli_fetch_array($result,MYSQLI_ASSOC);//导出查询结果
echo $row["subject"].$row["grade"];//打印查询结果
?>
最终输出的变量是$row[“subject”]和row[“grade”]
上述代码执行结果:Chinese80
参数MYSQLI_NUM将会把查询结果以顺序数组输出。
<?php
include(mysql.inc.php);//获得连接凭证
$sql="SELECT * FROM extable";
$result=mysqli_query($conn,$sql);//执行查询语句
$row=mysqli_fetch_array($result,MYSQLI_NUM);//导出查询结果
echo $row[0].$row[1];//打印查询结果
?>
最终输出的变量是$row[0]和row[1]
上述代码执行结果:Chinese80
参数MYSQLI_BOTH将会把查询结果同时以关联字段名称和顺序数组输出。
<?php
include(mysql.inc.php);//获得连接凭证
$sql="SELECT * FROM extable";
$result=mysqli_query($conn,$sql);//执行查询语句
$row=mysqli_fetch_array($result,MYSQLI_BOTH);//导出查询结果
echo $row["subject"].$row["grade"];//打印查询结果
echo $row[0].$row[1];//打印查询结果
?>
上述代码执行结果:Chinese80Chinese80
可见三种方式的区别主要在于导出查询结果这一步。
MYSQLI_ASSOC导出的是关联字段名称的数组,使用row[“字段名称”]打印;
MYSQLI_NUM导出的是顺序数组,用row[0]开始打印;
MYSQLI_BOTH同时导出两种,用两种方式都可以打印。
mysqli_fetch_array函数每执行一次,按顺序取一行数据(不包含字段名),直到最后返回false。所以看到只打印了Chinese的grade为80,剩下的没有打印出来。想要将其全部打印出来,多次运行即可。
<?php
include(mysql.inc.php);//获得连接凭证
$sql="SELECT * FROM extable";
$result=mysqli_query($conn,$sql);//执行查询语句
$row=mysqli_fetch_array($result,MYSQLI_ASSOC);//导出查询结果
echo $row["subject"].$row["grade"];//打印查询结果
$row=mysqli_fetch_array($result,MYSQLI_ASSOC);//导出查询结果
echo $row["subject"].$row["grade"];//打印查询结果
$row=mysqli_fetch_array($result,MYSQLI_ASSOC);//导出查询结果
echo $row["subject"].$row["grade"];//打印查询结果
?>
上述代码执行结果:Chinese80math90English70
当有大量数据导出时,这种方法就显得捉襟见肘了,所以一般使用一个循环语句将所有的查询结果导出。
<?php
include(mysql.inc.php);//获得连接凭证
$sql="SELECT * FROM extable";
$result=mysqli_query($conn,$sql);//执行查询语句
while ($row=mysqli_fetch_array($result,MYSQLI_ASSOC))
{
echo $row["subject"].$row["grade"];//打印查询结果
}
?>
上述代码执行结果:Chinese80math90English70
另有mysqli_fetch_assoc和mysqli_fetch_row使用方法和mysqli_fetch_array类似,分别为指定关联字段名称的数组和顺序数组导出。
建议使用关联字段名称数组的导出方式。因为一旦表格结构发生变化,如新增、减少了字段或字段顺序发生变化,顺序数组导出将出现错误,而关联字段名称数组的方式不会受到影响。
三、打印结果美化
之前的打印结果都是所有数据连在一起,为了使数据具备更好的可读性,一般将其打印成表格的形式。
需要结合html的table标签。
table标签的结构:
<table>
<tr> <!--表头-->
<th>字段名称1</th>
<th>字段名称2</th>
<th>...</th>
</tr>
<tr> <!--第一行-->
<td>数据1</td>
<td>数据2</td>
<td>...</td>
</tr>
<tr> <!--第二行-->
<td>数据1</td>
<td>数据2</td>
<td>...</td>
</tr>
<tr> <!--第三行-->
<td>数据1</td>
<td>数据2</td>
<td>...</td>
</tr>
...
</table>
通过观察,除表头外,剩下的每一行结构都是相同的,并且mysqli_fetch_array函数也是忽略表头部分的,因此表头部分需要单独打印,剩下的可以使用循环结构打印,然后将字符串进行拼接。
<?php
include(mysql.inc.php);//获得连接凭证
$sql="SELECT * FROM extable";
$result=mysqli_query($conn,$sql);//执行查询语句
echo "<table><tr><th>subject</th><th>grade</th></tr>";
while ($row=mysqli_fetch_array($result,MYSQLI_ASSOC))
{
echo "<tr><td>".$row["subject"]."</td>"."<td>".$row["grade"]."</td></tr>";
}
echo "</table>";
?>
上述代码运行结果:
还可以通过调整table的css参数进行更多美化,此处不再赘述。
四、断开连接
尽管数据库服务器在没有操作的一段时间之后,会自动断开连接,但这仍会造成一段时间的占用。因此应该在完成数据库操作之后主动断开连接,以节省服务器资源。
mysqli_close($conn);
$conn为建立连接时的授权凭证,运行此函数即可断开连接。