PHP连接MySQL数据库基础:循环结构与表单提交实战
本文详解PHP如何连接MySQL数据库,涵盖使用while和do-while循环遍历结果集的方法,以及如何通过HTML表单将数据发送至服务器存入数据库。
连接数据库与基础列表显示
在开始编写PHP脚本之前,确保已创建好名为 mydb 的数据库及包含员工信息的 employees 表。以下代码展示了如何通过PHP连接到本地MySQL服务器,选择数据库,并执行查询以获取所有员工记录。
<html>
<body>
<?php
// 1. 连接数据库
$db = mysql_connect("localhost", "root");
// 2. 选择特定数据库
mysql_select_db("mydb", $db);
// 3. 执行查询语句
$result = mysql_query("SELECT * FROM employees", $db);
// 开始构建表格HTML
echo "<table border=1>n";
echo "<tr><td>姓名</td><td>职位</td></tr>n";
// 4. 使用while循环遍历结果集
// mysql_fetch_row 返回索引数组
while ($myrow = mysql_fetch_row($result)) {
// $myrow[0]通常是ID, [1]是first name, [2]是last name, [3]是position等
printf("<tr><td>%s %s</td><td>%s</td></tr>n", $myrow[1], $myrow[2], $myrow[3]);
}
echo "</table>n";
?
>
</body>
</html>
代码解析:
mysql_connect和mysql_select_db用于建立与数据库服务器的连接。while ($myrow = mysql_fetch_row($result)):这是核心逻辑。mysql_fetch_row()每次从结果集中取出一行作为索引数组。只要还有数据,条件为真,循环继续;数据取完后,函数返回false,循环结束。- 优势:如果数据库中没有任何记录,
mysql_fetch_row立即返回false,循环体不会执行,程序直接输出表格头和内容(虽然此时可能为空),不会产生错误报错。
处理无记录情况与改进循环方式
上述简单 `while` 循环虽然安全,但如果数据库没有记录,用户看到的只是一张空表格,体验不佳。我们需要在程序开始前检查是否有数据。此外,索引数组访问(如 `$myrow[1]`)不如字段名清晰,这里引入 mysql_fetch_array 配合 if-else 和 do-while 结构。
<html>
<body>
<?php
$db = mysql_connect("localhost", "root");
mysql_select_db("mydb", $db);
$result = mysql_query("SELECT * FROM employees", $db);
// 尝试获取第一行记录
if ($myrow = mysql_fetch_array($result)) {
echo "<table border=1>n";
echo "<tr><td>姓名</td><td>住址</td></tr>n";
// do-while 至少执行一次循环体,然后判断条件
do {
// 使用关联数组,通过字段名访问更直观
printf("<tr><td>%s %s</td><td>%s</td></tr>n",
$myrow["first"], $myrow["last"], $myrow["address"]);
} while ($myrow = mysql_fetch_array($result));
echo "</table>n";
} else {
echo "对不起,没有找到记录!";
}
?
>
</body>
</html>
关键变化说明:
mysql_fetch_array($result):相比_row,它同时返回索引数组和关联数组(字段名)。例如可以使用$myrow["first"]而不是猜测下标。if ( $myrow = ... ):首先尝试取一条记录。如果成功(有数据),进入if块生成表格;如果失败(无数据),进入else块提示用户。do { ... } while (...):为什么要用do-while?因为在if判断时我们已经消耗了第一条记录并赋给了$myrow。如果使用普通while循环并在条件中再次fetch,会跳过第一条数据。do-while确保先打印当前已有的第一条数据,再去 fetch 下一条,避免数据丢失。
实现分页链接与单条记录查看
为了增强实用性,我们让列表中的名字变成超链接,点击后跳转到同一页面并携带 ID 参数,从而显示该员工的详细信息。
<html>
<body>
<?php
$db = mysql_connect("localhost", "root");
mysql_select_db("mydb", $db);
// 假设通过 GET 请求传递了 id 参数
if (isset($id)) {
// --- 模式A: 显示单条记录 ---
$result = mysql_query("SELECT * FROM employees WHERE id=$id", $db);
$myrow = mysql_fetch_array($result);
if ($myrow) {
printf("<b>名:</b> %s<br>", $myrow["first"]);
printf("<b>姓:</b> %s<br>", $myrow["last"]);
printf("<b>住址:</b> %s<br>", $myrow["address"]);
printf("<b>职位:</b> %s<br>", $myrow["position"]);
}
} else {
// --- 模式B: 显示员工列表 ---
$result = mysql_query("SELECT * FROM employees", $db);
if ($myrow = mysql_fetch_array($result)) {
do {
// 使用 $PATH_INFO 或脚本路径构造链接,带上 id 参数
// 注意引号转义
printf("<a href='%s?id=%s'>%s %s</a><br>n",
$_SERVER['PHP_SELF'], $myrow["id"],
$myrow["first"], $myrow["last"]);
} while ($myrow = mysql_fetch_array($result));
} else {
echo "对不起,没有找到记录!";
}
}
?
>
</body>
</html>
逻辑说明:
isset($id):检测 URL 参数中是否包含id。如果有,说明用户点击了链接,进入详细查看模式;否则,显示列表模式。$_SERVER['PHP_SELF']:获取当前脚本的文件名,用于构建设置回跳链接(原文使用的$PATH_INFO变量已过时或需特定配置,现代 PHP 推荐使用$_SERVER['PHP_SELF'])。
向数据库发送数据(HTML表单与POST方法)
学会了读取,接下来学习如何插入数据。这主要通过 HTML Form 和 PHP 的 $_POST 超级全局变量来实现。
- 创建表单页面 (
insert.php):
<form method="post" action="">
名:<input type="Text" name="first"><br>
姓:<input type="Text" name="last"><br>
住址:<input type="Text" name="address"><br>
职位:<input type="Text" name="position"><br>
<input type="Submit" name="submit" value="输入信息">
</form>
- 处理表单提交 (
process.php 或在同一文件中判断):
<?php
if ($_POST['submit']) {
$db = mysql_connect("localhost", "root");
mysql_select_db("mydb", $db);
// 接收表单数据
$first = addslashes($_POST['first']);
$last = addslashes($_POST['last']);
$address = addslashes($_POST['address']);
$position = addslashes($_POST['position']);
// 执行插入语句
$query = "INSERT INTO employees (first, last, address, position)
VALUES ('$first', '$last', '$address', '$position')";
$result = mysql_query($query, $db);
if ($result) {
echo "数据添加成功!";
} else {
echo "数据添加失败: " . mysql_error();
}
}
?
>
注意事项:
method="post":数据将通过 HTTP POST 方式发送,不会出现在 URL 中,适合提交敏感或长文本数据。addslashes():简单的字符串转义,防止特殊字符破坏 SQL 语句(生产环境中建议使用预处理语句 Prepared Statements 以防止 SQL 注入)。INSERT INTO:标准的 SQL 插入语法,需指定列名和对应的值。
简要总结
以上就是PHP连接MySQL数据库的基础详细内容,涵盖了连接建立、使用while/do-while循环读取记录、基于URL参数的页面状态切换以及使用HTML表单POST方法插入数据的完整流程。更多关于PHP数据库操作的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













