仓酷云

标题: PHP网页编程之用PHP和MySQL构建一个数据库驱动的网站... [打印本页]

作者: 飘飘悠悠    时间: 2015-2-3 23:53
标题: PHP网页编程之用PHP和MySQL构建一个数据库驱动的网站...
对我一点用处没有啊,我知道该怎么学,但是我想如何才能更快的学,一周速成,啊不,24小时速成那种,皮皮你有没?mysql|数据|数据库   摘要

  在这一章内咱们会进修到若何在一个Web页面中向数据库中存储信息并显示它。

(2002-08-29 14:11:25)

--------------------------------------------------------------------------------
By Wing, 出处:Linuxaid


第四章: 用PHP会见MySQL数据库

  在这一章内咱们会进修到若何在一个Web页面中向数据库中存储信息并显示它。之前咱们已装置了MySQL这个关系型数据库引擎和PHP这个办事器端剧本言语,并进修了有关它们的根基常识。在学完这一章后,咱们将分明若何综合使用这两个新的东西来构建一个数据库驱动的网站!

对前一局部的回忆

  在咱们往下持续之前,回忆一下咱们进修的目标应当是件有价值的事。如今有咱们的体系中有了两个强无力的新的东西:剧本言语PHP和数据库引擎MySQL。弄清晰二者是假如协同任务是很主要的。

  数据库驱动的网站的本色就是答应站点的内容存在于一个数据库中,而且可以经由过程这个数据库来静态地发生Web页面来让咱们的会见者经由过程尺度的Web阅读器来显示它。所以在你的体系的一端是一个会见你的站点的阅读者,他经由过程会见http://www.yoursite.com/来取得一个尺度的HTML格局的Web页面并在Web阅读器中显示它。在你的体系的另外一端是经由过程一个或几个数据表存储在一个只了解若何呼应SQL查询(号令)的MySQL数据库中的你的站点的内容。

  PHP剧本言语承当了二者之间的联系员的脚色,利用PHP,你可以编写一个尺度HTML的“模板”,这个“模板”决意了你的站点的外不雅(包含丹青和页面设计)。这时候内容是属于这个“模板”的,你可使用一些PHP代码来毗连MySQL数据库而且利用SQL查询来取得数据并在其响应地位显示它,这里的SQL查询是和咱们在第二章顶用来创立笑话数据表时一样的。

  如今关于会见者在会见你的数据库驱动的网站的一个页面时,究竟会产生甚么事,你应当有个明白的熟悉了:

  会见者的Web阅读器利用一个尺度的URL恳求这个页面。

  Web办事器软件(Apache、IIS或其他)认定被恳求的页面是一个PHP剧本,因此在呼应这个页面恳求之前用它的PHP插件来注释它。

  一些PHP号令(咱们还没学到)会毗连MySQL数据库并向数据库恳求属于这个Web页面的内容。

  MySQL数据库作出呼应而且向PHP剧本收回被恳求的内容。

  PHP剧本将内容存储到一个或几个PHP变量中,并利用咱们熟习的echo函数将其作为Web页面的一局部输入。

  PHP插件完成处置并将生成的HTML正本前往到Web办事器。

  Web办事器将这个HTML正本发送到Web阅读器,这将是一个尺度的HTML文件,只不外它不是直接来自于一个HTML文件,而是来自于PHP插件供应的输入。

用PHP毗连MySQL

  在咱们从咱们的MySQL数据库中获得咱们的Web页面所包括的内容之前,咱们起首必需晓得若何创立与MySQL的毗连。在第二章中,咱们利用了一个叫mysql的法式来做如许的毗连。PHP不需求如许的一个法式,对毗连MySQL的撑持是言语内置的。上面的这个函数用来创立如许的毗连:

mysql_connect(<address>, <username>, <password>);


  在这里,<address>是MySQL办事软件在其上运转的盘算机的IP地址或主机名(假如这与运转Web办事软件的盘算机是统一台,你可使用"localhost"),<username>和<password>就是你在第二章顶用来毗连到MySQL办事器的用户名及口令。

  你能够还记得PHP中的函数在被挪用时常常会前往(输入)一个值。请不要忧虑咱们没有提示你,咱们在最后接触一个函数时城市为你具体具体它。绝大多半的函数在被挪用后,城市前往一个可以在存储在变量中的值以备下次利用。例如咱们下面引见的mysql_connect函数,会前往一个数字来标识已创立的毗连。由于咱们会要利用这个毗连,所以咱们必需保留这个值。上面是一个关于若何毗连咱们的MySQL数据库的一个实例:

$dbcnx = mysql_connect("localhost", "root", "mypasswd");


  需求申明的是,关于你的MySQL办事器,下面这个函数中的三个参数的值多是分歧的。你应当注重到在这儿咱们的mysql_connect 前往了一个值(咱们称之为一个毗连标识),这个值被咱们存储在变量$dbcnx中。

  由于MySQL是一个完整散布式的软件,咱们必需思索到这些能够性:办事不成用、收集梗塞或是咱们的用户名及口令不婚配。在这些情形下,mysql_connect函数不克不及前往一个毗连标识(由于毗连未被创立)。这时候,会前往一个逻辑假。这使得咱们可以用一个if语句来处置毗连的情形: $dbcnx = @mysql_connect("localhost", "root", "mypasswd");


if (!$dbcnx) {
  echo( "<P>Unable to connect to the " .
        "database server at this time.</P>" );
  exit();
}



  在下面的代码段中呈现了三个新的器材,起首,咱们在mysql_connect函数前加了一个@符号。包含mysql_connect在内的很多函数会在掉败后显示好看的毛病信息。在函数名前加一个@符号可以告知这个函数当履行掉败时,答应咱们显示咱们本人友爱的失足信息。

  其次,在咱们的if语句的前提中,$dbcnx变量后面加了一个赞叹号。这个赞叹号是PHP中的“否运算符”。也就是说将逻辑真变成逻辑假,将逻辑假变成逻辑真。如许,假如这个毗连是掉败的,mysql_connect会前往一个逻辑假,!$dbcnx将等于逻辑真,如许咱们的if语句将被履行。相反,假如这个毗连是胜利的,存储在$dbcnx 中的毗连标识将等于逻辑真(在PHP中,任何非零的数字都被以为是逻辑真),所以!$dbcnx会等于逻辑假,if语句将不会被履行。

  最初一个是exit函数,这是咱们碰到的第一个没有参数的函数。这个函数的全体感化就是招致PHP中断对本页的浏览。假如数据库毗连掉败这是一个很好的呼应,由于绝大多半情形下,假如不克不及毗连到数据库,这一页不会显示任何有效的信息。

  和咱们在第二章做过的一样,毗连被创立后下一步就是选择任务的数据库。咱们将要在第二章中所创立的笑话数据库中任务。这个数据库被定名为jokes。在PHP顶用来选择数据库的别的一个函数:

mysql_select_db("jokes", $dbcnx);


  请注重咱们在这儿利用了$dbcnx变量来指出了这个函数所利用的毗连标识。这个参数实践上是可省略的。当省略这个参数时,函数会主动利用最初开启的那一个毗连。这个函数胜利后前往逻辑真,掉败后前往逻辑假。为了慎重起见,咱们也用了一个if语句来处置毛病:


if (! @mysql_select_db("jokes") ) {
  echo( "<P>Unable to locate the joke " .
        "database at this time.</P>" );
  exit();
}



  当创立了毗连并选择了数据库以后,咱们可以入手下手利用存储在数据库中的数据了。

在PHP中履行SQL查询

  在第二章中,咱们利用一个叫mysql的法式来毗连到MySQL数据库办事器,在这个法式中,咱们可以输出SQL查询(号令)并当即显示查询了局。在PHP中,有着相似的机制:mysql_query函数。

mysql_query(<query>, <connection id>);


  在这儿,<query>是一个包括将履行的SQL号令的字符串。和mysql_select_db一样,毗连标识这个参数也是可选的。

  这个函数的前往决意于收回的查询的类型。关于绝大多半的SQL号令来讲,mysql_query前往逻辑真或逻辑假来标明履行是不是胜利。请参看上面这个例子,这是用来创立咱们在第二章中创立的Jokes数据表的:


$sql = "CREATE TABLE Jokes ( " .
       "ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY, " .
       "JokeText TEXT, " .
       "JokeDate DATE NOT NULL " .
       ")";
if ( mysql_query($sql) ) {
  echo("<P>Jokes table successfully created!</P>");
} else {
  echo("<P>Error creating Jokes table: " .
       mysql_error() . "</P>");
}



  这儿利用的mysql_error将以字符串的模式前往MySQL办事器最初收回的毛病信息。

  关于DELETE、 INSERT和UPDATE(用来修正存储的数据),MySQL可以晓得有几何数据行被这个查询影响。参看上面的SQL号令,这个号令咱们曾在第二章顶用来设置一切包括单词“chicken”的笑话的日期:


$sql = "UPDATE Jokes SET JokeDate='1990-04-01' " .
       "WHERE JokeText LIKE '%chicken%'";
    当咱们履行这个查询时,咱们可使用mysql_affected_rows函数来显示这个修正所影响的数据行的数量:
if ( mysql_query($sql) ) {
  echo("<P>Update affected " .
        mysql_affected_rows() . " rows.</P>");
} else {
  echo("<P>Error performing update: " .
       mysql_error() . "</P>");
}



  SELECT号令会有一些分歧,由于它会失掉很多信息,而PHP必需供应办法来处置这些信息。

处置SELECT了局集

  关于绝大多半的SQL查询来讲,mysql_query函数仅仅前往逻辑真或逻辑假。而关于SELECT查询来讲,仅仅如许明显是不敷的。你应当还记得SELECT查询是用来显示数据库中存储的数据的。除指出查询胜利仍是掉败以外,PHP还必需失掉查询的了局。作为一个了局,当咱们履行一个SELECT查询的时分,mysql_query会前往一个标识“了局集”的数字,这将包括了这个查询前往的一切行的列表。假如查询掉败,函数依然是前往一个逻辑假。


$result = mysql_query("SELECT JokeText FROM Jokes");
if (!$result) {
  echo("<P>Error performing query: " .
       mysql_error() . "</P>");
  exit();
}



  假定在履行查询时没有碰到毛病,下面的代码会定位一个有关存储在笑话库中一切笑话的注释的了局集,这个定位被存储在变量$result中。由于数据库中的笑话的数量是没无限制的,这个了局集能够十分复杂。

  咱们之前已经提到过while轮回关于处置大批的数据来讲是一个十分有效的掌握语句,这是咱们逐一处置了局集中数据行的代码的根基格局:


while ( $row = mysql_fetch_array($result) ) {
  // process the row...
}



  在这个while轮回中的前提能够看上去与咱们已经利用过的有所分歧,所以咱们有需要在这里注释它的任务机理。你可以先把这个前提当作一个自力的语句:

$row = mysql_fetch_array($result);


  mysql_fetch_array函数以一个参数(关于这个例子来讲是存储在$result变量中)承受到一个了局集,并以一个数据的模式前往了局集中的下一行。假如你还不熟习数组的概念,不要忧虑,咱们会鄙人面具体会商它。假如在这个了局集中不再有其它数据行时,mysql_fetch_array前往逻辑假。

  如今,咱们下面的语句界说了一个值到$row变量中,与此同时,全部语句也取得了一样的值。这就是咱们在while轮回的前提中利用这个语句的缘由,由于while轮回会一向履行轮回直到前提等于逻辑假,了局集有几行,这个轮回就会履行几回,每次$row城市失掉一个下一行的值,如今剩下的就是若何在轮回中从$row变量中取得响应的值了。

  了局集中的行被描写成一个数组。数组是一个特别类型的变量,这个变量可以包括多个值,假如你把一个变量当作是值的容器,你可以把数组当作是有距离的容器,在每个距离中可以存储一个独自的值。关于咱们的数据行来讲,这个距离是以数据表的列名定名的。假如$row是咱们了局集中的一行,那末$row["JokeText"]就是这一行中JokeText列的值。所以假如咱们想要显示咱们的数据库中地点笑话的注释,while轮回应当是如许的:


while ( $row = mysql_fetch_array($result) ) {
  echo("<P>" . $row["JokeText"] . "</P>");
}



  最初,作为一个总结,这是一段完全的PHP的Web页面的代码,它用来毗连咱们的数据库,掏出数据库中一切笑话的注释,并将其在HTML中显示出来:


<HTML>
<HEAD>
<TITLE> Our List of Jokes </TITLE>
</HEAD>
<BODY>
<?php

  // Connect to the database server
  $dbcnx = @mysql_connect("localhost",
           "root", "mypasswd");
  if (!$dbcnx) {
    echo( "<P>Unable to connect to the " .
          "database server at this time.</P>" );
    exit();
  }

  // Select the jokes database
  if (! @mysql_select_db("jokes") ) {
    echo( "<P>Unable to locate the joke " .
          "database at this time.</P>" );
    exit();
  }

?>
<P> Here are all the jokes in our database: </P>
<BLOCKQUOTE>

<?php
    // Request the text of all the jokes
  $result = mysql_query(
            "SELECT JokeText FROM Jokes");
  if (!$result) {
    echo("<P>Error performing query: " .
         mysql_error() . "</P>");
    exit();
  }

  // Display the text of each joke in a paragraph
  while ( $row = mysql_fetch_array($result) ) {
    echo("<P>" . $row["JokeText"] . "</P>");
  }
?>
</BLOCKQUOTE>
</BODY>
</HTML>



向数据库中拔出数据

  在这一节里,咱们会看到咱们会若何综合使用这些东西来让咱们站点的会见者向数据库中添加他们本人的笑话。假如你喜好应战,你可以尝尝在向下看之前想一想大致上应当怎样做。在这一节里只要很少新的器材。关于咱们学过的器材来讲,这只是一个复杂的使用。

  假如咱们想要让会见者可以输出新的笑话,咱们起首需求一个表单,这儿是这个表单的代码:


<FORM ACTION="<?php echo($PHP_SELF); ?>" METHOD=POST>
<P>Type your joke here:<BR>
<TEXTAREA NAME="joketext" ROWS=10 COLS=40 WRAP></TEXTAREA><BR>
<INPUT TYPE=SUBMIT NAME="submitjoke" VALUE="SUBMIT">
</FORM>



  正如咱们下面看到的那样,这个表单在提交时会载入统一个页面(由于咱们在表单的ACTION属性中利用了$PHP_SELF变量),然而在再次载入时恳求中包括了两个变量,起首是$joketext,这是在text域中输出的笑话的注释,另外一个是$submitjoke,这个变量的值将一直是"SUBMIT",这用来标记笑话已被提交。

   要将已提交的笑话添加到数据库中,咱们需求用mysql_query来运转一个INSERT查询,这个查询中将包括已提交的$joketext变量的值:


if ("SUBMIT" == $submitjoke) {
  $sql = "INSERT INTO Jokes SET " .
         "JokeText='$joketext', " .
         "JokeDate=CURDATE()";
  if (mysql_query($sql)) {
    echo("<P>Your joke has been added.</P>");
  } else {
    echo("<P>Error adding submitted joke: " .
         mysql_error() . "</P>");
  }
}



  在全体的内容中只要SQL代码中呈现了一个新的器材。在这里咱们利用了一个MySQL函数CURDATE()来将新拔出数据库的笑话的JokeDate列的值置为以后日期。现实上,MySQL有良多如许的函数,然而咱们只会在利用到他们时才会引见他们,要失掉一个完全的函数的申明,你可以参看MySQL参考手册。

    终于学会把表单的数据插入数据库,然后显示出来了,应该说一个程序的雏形已经诞生了。
作者: 因胸联盟    时间: 2015-2-9 18:14
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
作者: 灵魂腐蚀    时间: 2015-2-9 23:01
你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。
作者: 金色的骷髅    时间: 2015-2-28 03:41
写的比较杂,因为我也是个新手,不当至于大家多多指正。
作者: 爱飞    时间: 2015-3-9 20:30
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
作者: 蒙在股里    时间: 2015-3-17 00:38
先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。
作者: 莫相离    时间: 2015-3-21 13:14
爱上php,他也会爱上你。
作者: 若相依    时间: 2015-4-3 04:44
真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,
作者: 仓酷云    时间: 2015-4-11 05:21
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
作者: 第二个灵魂    时间: 2015-4-15 19:12
首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。
作者: 兰色精灵    时间: 2015-4-17 23:19
对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。
作者: 小妖女    时间: 2015-4-21 21:45
多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。
作者: admin    时间: 2015-4-26 21:09
本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。
作者: 小魔女    时间: 2015-5-1 22:12
先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。
作者: 精灵巫婆    时间: 2015-5-3 16:44
首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。
作者: 深爱那片海    时间: 2015-6-28 14:45
本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。
作者: 飘飘悠悠    时间: 2015-7-3 06:18
对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。
作者: 变相怪杰    时间: 2015-7-10 05:29
你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。
作者: 透明    时间: 2015-7-10 11:52
如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,
作者: 小女巫    时间: 2015-7-11 18:41
刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2