搜尋
首頁後端開發php教程PHP教程.数据库连接(1)_PHP

PHP教程.数据库连接(1)_PHP

Jun 01, 2016 pm 12:40 PM
p使用資訊可以教學資料庫文件表單連接

中场一:数据库连接

前两章中集中介绍了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


Administrative Menu



  1. Creat Database
    Connection




在文件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 脚本中,一个定义为的域信息可以直接在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--多个应用程序使用的一套例程。
function affy_footer() {
echo '
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
簡單地說明PHP會話的概念。簡單地說明PHP會話的概念。Apr 26, 2025 am 12:09 AM

phpsessionstrackuserdataacrossmultiplepagerequestsusingauniqueIdStoredInAcookie.here'showtomanageThemeffectionaly:1)startAsessionWithSessionWwithSession_start()和stordoredAtain $ _session.2)

您如何循環中存儲在PHP會話中的所有值?您如何循環中存儲在PHP會話中的所有值?Apr 26, 2025 am 12:06 AM

在PHP中,遍歷會話數據可以通過以下步驟實現:1.使用session_start()啟動會話。 2.通過foreach循環遍歷$_SESSION數組中的所有鍵值對。 3.處理複雜數據結構時,使用is_array()或is_object()函數,並用print_r()輸出詳細信息。 4.優化遍歷時,可採用分頁處理,避免一次性處理大量數據。這將幫助你在實際項目中更有效地管理和使用PHP會話數據。

說明如何使用會話進行用戶身份驗證。說明如何使用會話進行用戶身份驗證。Apr 26, 2025 am 12:04 AM

會話通過服務器端的狀態管理機制實現用戶認證。 1)會話創建並生成唯一ID,2)ID通過cookies傳遞,3)服務器存儲並通過ID訪問會話數據,4)實現用戶認證和狀態管理,提升應用安全性和用戶體驗。

舉一個如何在PHP會話中存儲用戶名的示例。舉一個如何在PHP會話中存儲用戶名的示例。Apr 26, 2025 am 12:03 AM

Tostoreauser'snameinaPHPsession,startthesessionwithsession_start(),thenassignthenameto$_SESSION['username'].1)Usesession_start()toinitializethesession.2)Assigntheuser'snameto$_SESSION['username'].Thisallowsyoutoaccessthenameacrossmultiplepages,enhanc

哪些常見問題會導致PHP會話失敗?哪些常見問題會導致PHP會話失敗?Apr 25, 2025 am 12:16 AM

PHPSession失效的原因包括配置錯誤、Cookie問題和Session過期。 1.配置錯誤:檢查並設置正確的session.save_path。 2.Cookie問題:確保Cookie設置正確。 3.Session過期:調整session.gc_maxlifetime值以延長會話時間。

您如何在PHP中調試與會話相關的問題?您如何在PHP中調試與會話相關的問題?Apr 25, 2025 am 12:12 AM

在PHP中調試會話問題的方法包括:1.檢查會話是否正確啟動;2.驗證會話ID的傳遞;3.檢查會話數據的存儲和讀取;4.查看服務器配置。通過輸出會話ID和數據、查看會話文件內容等方法,可以有效診斷和解決會話相關的問題。

如果session_start()被多次調用會發生什麼?如果session_start()被多次調用會發生什麼?Apr 25, 2025 am 12:06 AM

多次調用session_start()會導致警告信息和可能的數據覆蓋。 1)PHP會發出警告,提示session已啟動。 2)可能導致session數據意外覆蓋。 3)使用session_status()檢查session狀態,避免重複調用。

您如何在PHP中配置會話壽命?您如何在PHP中配置會話壽命?Apr 25, 2025 am 12:05 AM

在PHP中配置會話生命週期可以通過設置session.gc_maxlifetime和session.cookie_lifetime來實現。 1)session.gc_maxlifetime控制服務器端會話數據的存活時間,2)session.cookie_lifetime控制客戶端cookie的生命週期,設置為0時cookie在瀏覽器關閉時過期。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。