仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 853|回复: 19
打印 上一主题 下一主题

[学习教程] PHP编程:PHP教程.数据库毗连(1)

[复制链接]
柔情似水 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:17:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
我先解释一下我的学习思路。教程|数据|数据库|数据库毗连   中场一:数据库毗连

前两章中集中引见了PHP言语,如今停上去入手下手创立一个使用法式。在本章中将创立一个毗连MySQL数据库的使用法式。

在进修过后面两章以后,你一定已学会了如何处置PHP外部数据,和如何编写语句和函数。下一步从逻辑上讲,应当到了进修若何用SQL(布局化查询语句)处置PHP的内部数据的时分了。然而,在入手下手进修这局部内容前,让咱们临时中止根基道理的进修,轻松一下。
让我带你一道探求PHP使用法式的开辟过程。从字面意义上讲,每个使用法式都应当是共同的,然而每个使用法式也都能在此前的任务基本上,即一系列通用功效的基本上构建。我建议将这两项手艺夹杂在一同。自觉地利用后人已编写好的功效,会褫夺在法式中到场新特征,还会禁止为进步函数的效力而去修正旧函数。从另外一方面讲,利用已有函数意味着能更快的开辟出使用法式。所以必需在这两个极端中掌控好本人,才干成为一个优异的法式设计员。

注重:假如如今还对HTML不熟习,那末如今就是入手下手进修的工夫了。本书中假定你已熟习HTML了。假如还不熟习HTML表格和表单的话,很快就会被弄懵懂的。

5.1 初步
每当入手下手一个新项目时,我喜好从一个新的空目次入手下手。在这里,让咱们把这个目次称为phpbook/ch05。固然,这个目次必需在Web办事器的根目次下。假如你是依照第一章的指令装置PHP的话,那末,Web办事器的根目次就应当为/usr/local/apache/htdocs。接着,咱们将创立一个名为menu.php3的文件,个中包括有一个后台办理义务菜单,如清单5.1所示。

清单5.1 menu.php3
<?php require('common.inc'); ?>
<?php affy_header('Administrative Menu') ?>
<h1>Administrative Menu</h1>
<ol>
<li><a href="connect.php3">Creat Database
Connection</a></li>
</ol>
<?php affy_footer() ?>

在文件common.inc中包括对函数affy_header和affy_footer的界说。这些函数在本章中稍后还会呈现。
5.2 创立毗连
当点击Create Database Connect(创立数据库毗连)联接时,将会履行connect.php3文件,该文件将测验考试毗连在第二章进修中装置的MySQL数据库办事器。
清单5.2 显示了connect.php3文件利用用户名codebits和暗码codebits测验考试停止数据库毗连,由于在装置MySQL时还没有创立该用户名,所以毗连一定掉败。但是掉败 -- 最最少在本例中 -- 倒是一件功德,由于咱们可以看看应当若何处置这个成绩。图5.1给出了毗连掉败后将会显示的毛病信息和表单。

清单5.2 connect.php3

Page 107 -108 清单 5.2


Page 108 Figure 5.1

图5.1 毗连掉败时的毛病信息显示

当数据库毗连掉败时,法式会给出一个毛病信息提醒和一个表单,用户可以在外面输出root用户的暗码。就像在本章稍后讲的那样,有了root的暗码,就能够创立名为codebits的用户。如今先跳过有关$arr_request数组的局部。
当函数mysql_connect被挪用且毗连掉败时,该函数凡是会显示以下信息:

Warnint: MySQL connection Failed: Access denied
for user: 'codebits@localhost' (Using password: YES)

绝大多半使用法式需求准确的掌握显示的内容,特别是高度图形化的使用法式。在函数mysql_connect前加上(@)符号将会克制毛病信息的显示。
注重表单语句的action属性指定点击submit按钮时,将会履行connect.php3文件。这是一个递归途序的例子,也就是说答应PHP文件挪用它本人。
使用递归编程手艺,可以将有关统一个主题的一切代码编制在统一个文件中。至于甚么时分应当将函数组分解一个文件,或将法式分化成几个文件,这得凭经历。我的重要准绳是:当完成一个特定功效所编的法式代码超越100行以上时,就要创立一个自力的文件。

5.3 获得HTML表单信息
即便输出一个暗码并点击毗连数据库,毗连依然会掉败,缘由是connect.php3还没有利用表单中的输出值去创立数据库毗连。
PHP引擎将每个表单域放到一个叫做$HTTP_POST_VARS的数组中。在上述给出的例子中,数组有两个元素:username和password。在此法式中可以经由过程$HTTP_POST_VARS['username']和$HTTP_POST_VARS['password']会见表单信息。
利用$HTTP_POST_VARS['password']取得表单中的信息看起来对照复杂。然而仍有一些埋没的成绩。起首,要反省表单域的名字(本例中的password)是大写、小写、仍是巨细写都有。
第二件成绩包括的内容与本例关系不大。除表双方法之外,还可使用URL来运转PHP剧本,例如:

http://.../connect.php3?username=root&password=password

可以看到,用户名和暗码经由过程URL停止传递,问号“?”标记着域信息的入手下手,“&”则是域的定界符。侥幸的是,PHP引擎也主动剖析URL行,并将了局存入$HTTP_GET_VARS数组中。
成绩(假如你以为它是的话)在于,法式可以从不止一个中央取得信息 -- 数组$HTTP_GET_VARS和数组 $HTTP_POST_VARS。
看待这些(或其它一些的)成绩,我的处理举措是创立一个名为$arr_request的数组,它从两个$HTTP数组中取得初始化的信息。在common.inc中可使用以下编码行对数组$arr_repuest停止数值初始化。

// declare the request array which holds both
// url-based (get) and form-based (post) parameters.
$arr_request = array();

// move the url and form parameters into the
// request array. Form parameters supercede url
// parameters. Additionally, all keys are vonverted
// to lower-case.
If (count($HTTP_GET-VARS)) {
While (list($key, $value) = each ($HTTP_GET_VARS)) {
$arr_request[strtolower($key)] = $value;
}
}
if (count($HTTP_POST_VARS)) {
while (list($key, $value) = each ($HTTP_POST_VARS)) {
$arr_request[strtolower($key)] = $value;
}
}

假如在一切的PHP剧本中都包括有common.inc文件的话,那末不必忧虑剧本是怎样运转的。一切传曩昔的信息都以小写模式保留在数组$arr_request中,这就意味着,可使用$arr_request['username']失掉用户名信息。
PHP供应了数组$HTTP_GET_VARS和数组$HTTP_POST_VARS的替换体例,HTML表单和基于URL的信息都可以直接做为PHP变量停止会见。例如,在PHP 剧本中,一个界说为<input type = "input" name="last_name">的域信息可以直接在PHP法式顶用$last_name会见,一样的基于URL的信息,例如说,http://www.site.com?last_name=join,能由$last_name取得。不外,我仍是对照喜好利用数组$arr_request,由于关于要轮回利用传递给法式的一切信息来说,这长短常有效的。假如该信息是一个标量,那末它就不合适被轮回利用。例如:将一切参数名改成大写,以包管不致于由于利用换档键而损坏法式;或在毛病检测时,会需求显示一切的输出参数。

注重:本节只对CGI(通用网关接口)协定作很复杂的引见,更具体的内容请参阅本书附录A,“因特网资本”中所列内容。

5.4 利用HTML表单信息
既然可以很轻易地从PHP剧本法式中存取表单信息,如今是使用这些信息毗连数据库的工夫了。第一步是反省毗连数据库的代码:

$id_link = @mysql_connect('localhost', 'affy', 'affy');

在这行代码中,用户名和暗码都是字符串数值。为了能使用表单中的信息,这行代码需求加以变化,用变量取代数值:

$id_link = @mysql_connect(
'localhost',
$username,
$password);

既然用到了变量,那末必需对变量停止初始化。以下代码将履行这类初始化:

if ( count($arr_request) ) {
$username = $arr_request['username'];
$password = $arr_request['password'];
}
else {
$username = 'phpuser';
$password = 'phpuser';
}

当表单信息可用时,函数count的了局将大于1,使得if语句履行真前提的子句,此子句顺次从$arr_request数组中掏出用户名和暗码信息。
当没有表单信息存在时,用户名和暗码仍可以用字符串数值停止初始化。
第三种能够性是一个表单有这两个域但没有表单信息。假如挪用connect.php3的表单没有username和password域,会产生甚么情形呢?假如如许,以上代码将掉败。经由过程直接反省表单字段,而不是只依附于$arr_request数组的元素数量可让这段代码的更健壮(即,能处置这类情况下的掉败)。例如:

$username = $arr_request['username'];
$password = $arr_request['password'];

if (empty($username)) $username = 'phpuser';
if (empty($password)) $password = 'phpuser';

由于PHP对没有初始化的数组元素将前往空字符串,以上代码的顺应性将更强。利用标量比利用数组可使代码更轻易了解,而且在某些方面更无效率。假如这两个变量有一个为空时,这意味着表单没有供应任何值,将利用缺省值。
清单5.3显示了有以上更改的connect.php3文件,可以在高低文看到这两个变更的描写。

清单5.3 connect.php3修订版

Page 112 - 113 清单 5.3


当准确的root暗码如图5.2所示被输出到表单时,将会胜利地创立数据库毗连。


Page 113, Figure 5.2

图5.2 证明胜利地创立了数据库毗连

5.5 common.inc文件
清单5.4显示了本章需求的common.inc文件的版本。

清单5.4 common.inc--多个使用法式利用的一套例程。
<?php
function affy_footer() {
echo '</body></html>';
}

function affy_header($title) {
echo '<html><head><title>';
echo "$title";
echo '</title></head><body>';
}

function affy_message($msg) {
echo '<table>';
echo '<tr><td>';
echo "$msg";
echo '</td></tr>';
echo '</table>';
}
?>

5.6 总结
本章引见了若何利用PHP毗连数据库,第一步创立了一个Web菜单页,用它可以运转毗连数据库的剧本,然后创立了可以毗连数据库的connect.php3文件。
当connect.php3文件利用affy用户名妄图毗连数据库时掉败了,从而招致显示出了需求root用户暗码的表单。
表单中的信息经由过程common.inc文件被放在$arr_request数组中。并修正了connect.php3文件,使其利用变量$arr_request中的用户名和暗码来毗连数据库。

  开发相册系统过程中就有过这样的问题,因为没有交流好,出现重复工作问题,因为文档没有详细的说明而经常临时问对方。
乐观 该用户已被删除
沙发
发表于 2015-2-4 10:51:15 | 只看该作者
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
精灵巫婆 该用户已被删除
板凳
发表于 2015-2-5 10:29:46 | 只看该作者
环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。
海妖 该用户已被删除
地板
发表于 2015-2-5 15:30:48 | 只看该作者
当然这种网站的会员费就几十块钱。
冷月葬花魂 该用户已被删除
5#
发表于 2015-2-6 20:31:35 | 只看该作者
小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。
灵魂腐蚀 该用户已被删除
6#
发表于 2015-2-9 17:33:22 | 只看该作者
没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。
飘灵儿 该用户已被删除
7#
发表于 2015-2-27 12:48:22 | 只看该作者
Ps:以上纯属原创,如有雷同,纯属巧合
老尸 该用户已被删除
8#
发表于 2015-3-9 00:26:58 | 只看该作者
说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。
透明 该用户已被删除
9#
发表于 2015-3-11 05:21:38 | 只看该作者
对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。
小妖女 该用户已被删除
10#
发表于 2015-3-11 17:36:12 | 只看该作者
至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。
山那边是海 该用户已被删除
11#
发表于 2015-3-12 16:36:41 | 只看该作者
如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,
蒙在股里 该用户已被删除
12#
发表于 2015-3-20 00:13:07 | 只看该作者
这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己
愤怒的大鸟 该用户已被删除
13#
发表于 2015-3-25 22:41:10 | 只看该作者
当然这种网站的会员费就几十块钱。
飘飘悠悠 该用户已被删除
14#
发表于 2015-4-6 12:32:43 | 只看该作者
不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。
小魔女 该用户已被删除
15#
发表于 2015-4-12 20:59:52 | 只看该作者
首推的搜索引擎当然是Google大神,其次我比较喜欢 百度知道。不过搜出来的结果往往都是 大家copy来copy去的,运气的的概率很大。
简单生活 该用户已被删除
16#
发表于 2015-4-26 00:09:15 | 只看该作者
写的比较杂,因为我也是个新手,不当至于大家多多指正。
17#
发表于 2015-5-4 09:14:59 | 只看该作者
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
不帅 该用户已被删除
18#
发表于 2015-5-9 21:55:26 | 只看该作者
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
若相依 该用户已被删除
19#
发表于 2015-6-4 18:09:08 | 只看该作者
我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。
再现理想 该用户已被删除
20#
发表于 2015-6-4 19:09:22 | 只看该作者
对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-20 21:14

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表