用php修改数据库信息的流程图,第 2 课:设计应用程序。从数据库读取数据

在本部分中,先在 wishlist.php 中添加代码以创建数据库连接。然后,添加代码以检索在 index.php 窗体中键入其名字的许愿者的 ID 号。

双击 wishlist.php 文件。打开的模板与 index.php 不同。该文件以 和

标记开头和结尾,因为该文件还包含 HTML 代码。

// put your code here

?>

要显示标题,请在紧靠起始

标记后面以及生成的 <?php 标记前面的位置输入以下代码块:

Wish List of <?php echo htmlentities($_GET["user"])."
";?>

现在,代码如下所示:

Wish List of <?php echo htmlentities($_GET["user"])."
"; ?>

// put your code here

?>

PHP 代码块显示通过 "user" 字段中的 GET 方法接收的数据。在 "user" 文本字段中输入愿望列表所有者 Tom 的名字时,将从 index.php 中传输该数据。重复测试 index.php 中的步骤,以查看 wishlist.php 是否正常工作。

wishlist-php-title-works.png

在模板 PHP 块中删除注释部分。在该位置键入或粘贴以下代码。该代码打开数据库连接。

对于 MySQL 数据库:

$con = mysqli_connect("localhost", "phpuser", "phpuserpw");

if (!$con) {

exit('Connect Error (' . mysqli_connect_errno() . ') '. mysqli_connect_error());

}

//set the default client character

set mysqli_set_charset($con, 'utf-8');

对于 Oracle 数据库:

$con = oci_connect("phpuser", "phpuserpw", "localhost/XE", "AL32UTF8");

if (!$con) {

$m = oci_error();

exit('Connect Error ' . $m['message']);

}

该代码尝试打开数据库连接;如果失败,则会显示一条错误消息。

*Oracle 数据库用户注意事项:*您可能需要在 oci_connect 命令中修改数据库连接。标准语法为 "hostname/service name"。按照该语法,此代码片段中的 Oracle XE 数据库连接是 "localhost/XE"。

您可以使用 NetBeans IDE 的代码完成功能完成 mysqli 或 OCI8 函数。

codecompletion.png

在打开数据库连接的代码下面,在同一 PHP 块中键入或粘贴以下代码。该代码检索请求其愿望列表的许愿者的 ID。如果许愿者不在数据库中,代码将终止/退出该进程,然后显示一条错误消息。

对于 MySQL 数据库:

mysqli_select_db($con, "wishlist");

$user = mysqli_real_escape_string($con, htmlentities($_GET["user"]));

$wisher = mysqli_query($con, "SELECT id FROM wishers WHERE name='" . $user . "'");

if (mysqli_num_rows($wisher) < 1) {

exit("The person " . htmlentities($_GET["user"]) . " is not found. Please check the spelling and try again");

}

$row = mysqli_fetch_row($wisher);

$wisherID = $row[0];

mysqli_free_result($wisher);

对于 Oracle 数据库:(请注意,oci8 没有等效的 mysqli_num_rows )

$query = "SELECT id FROM wishers WHERE NAME = :user_bv";

$stid = oci_parse($con, $query);

$user = $_GET['user'];

oci_bind_by_name($stid, ':user_bv', $user);

oci_execute($stid);

//Because user is a unique value I only expect one row

$row = oci_fetch_array($stid, OCI_ASSOC);

if (!$row) {

exit("The person " . $user . " is not found. Please check the spelling and try again" );

}

$wisherID = $row['ID'];

oci_free_statement($stid);

将通过 $con 连接从 wishlist 数据库中选择数据。选择条件是从 index.php 中作为 "user" 接收的名字。

``SELECT`` SQL 语句的语法可以简述如下:

在 SELECT 后面,指定要从中获取数据的字段。星号 (*) 表示所有字段。

在 FROM 子句后面,指定必须从中检索数据的表的名称。

WHERE 子句是可选的。将在其中指定过滤条件。

mysqli 查询返回结果对象。OCI8 返回执行的语句。在这两种情况下,将从执行的查询结果中获取一行,并提取 ID 行的值以将其存储在 $wisherID 变量中。

最后,释放 mysqli 结果或 OCI8 语句。在实际关闭连接之前,您需要释放使用该连接的所有资源。否则,PHP 的内部引用计数系统会让基本 DB 连接保持打开,即使 $con 在 mysqli_close() 或 oci_close() 调用后无法使用。

*安全注意事项:*对于 MySQL,将转义 htmlentities($_GET["user"]) 参数以防止 SQL 注入攻击。请参见有关 SQL 注入的维基百科和 mysql_real_escape_string 文档。虽然在本教程的上下文中,您不会遇到有害 SQL 注入的风险,但最佳做法是转义存在此类攻击风险的 MySQL 查询中的字符串。OCI8 是通过绑定变量避免的。

此 PHP 块现已完成。如果使用的是 MySQL 数据库,则会看到 wishlist.php 文件现在如下所示:

Wish List of <?php echo htmlentities($_GET["user"]) . "
"; ?><?php $con = mysqli_connect("localhost", "phpuser", "phpuserpw");

if (!$con) {

exit('Connect Error (' . mysqli_connect_errno() . ') '

. mysqli_connect_error());

}//set the default client character set

mysqli_set_charset($con, 'utf-8');

mysqli_select_db($con, "wishlist");

$user = mysqli_real_escape_string($con, htmlentities($_GET["user"]));

$wisher = mysqli_query($con, "SELECT id FROM wishers WHERE name='" . $user . "'");

if (mysqli_num_rows($wisher) < 1) {

exit("The person " . htmlentities($_GET["user"]) . " is not found. Please check the spelling and try again");

}

$row = mysqli_fetch_row($wisher);

$wisherID = $row[0];

mysqli_free_result($wisher);

?>

如果使用的是 Oracle 数据库,则会看到 wishlist.php 文件现在如下所示:

Wish List of <?php echo htmlentities($_GET["user"]) . "
"; ?>

$con = oci_connect("phpuser", "phpuserpw", "localhost/XE", "AL32UTF8");

if (!$con) {

$m = oci_error();

exit('Connect Error ' . $m['message'];

exit;

}

$query = "SELECT id FROM wishers WHERE name = :user_bv";

$stid = oci_parse($con, $query);

$user = htmlentities($_GET["user"]);

oci_bind_by_name($stid, ':user_bv', $user);

oci_execute($stid);//Because user is a unique value I only expect one row

$row = oci_fetch_array($stid, OCI_ASSOC);

if (!$row) {

exit("The person " . $user . " is not found. Please check the spelling and try again" );

}

$wisherID = $row["ID"];

oci_free_statement($stid);

?>

如果测试应用程序并输入无效的用户,则会显示以下消息。

wishlist-php-title-user-not-found-works.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值