• 沉淀再出发:PHP的中级内容


    沉淀再出发:PHP的中级内容

    一、前言

        前面我们介绍了PHP的简单的语法知识以及相关的用法,接下来我们将PHP+mysql以及PHP+ajax结合起来进行研究。

    二、PHP+mysql

        首先我们看一段代码:

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Document</title>
     6 </head>
     7 <body>
     8     <?php
     9         $con=mysqli_connect("127.0.0.1","root","");
    10         // Check connection
    11         if (mysqli_connect_errno())
    12         {
    13            echo "Failed to connect to MySQL: " . mysqli_connect_error();
    14         }
    15 
    16         // Create database
    17         $sql="CREATE DATABASE zyr_db";
    18         if (mysqli_query($con,$sql))
    19         {
    20             echo "Database zyr_db created successfully";
    21             echo '<br>';
    22             mysqli_close($con);
    23         }
    24         else
    25         {
    26             echo "Error creating database: " . mysqli_error($con);
    27             echo '<br>';
    28         }
    29 
    30         $con=mysqli_connect("127.0.0.1","root","","zyr_db");
    31         // Check connection
    32         if (mysqli_connect_errno())
    33         {
    34            echo "Failed to connect to MySQL: " . mysqli_connect_error();
    35            echo '<br>';
    36         }
    37 
    38         // Create table
    39         $sql="CREATE TABLE Persons(FirstName CHAR(30),LastName CHAR(30),Age INT)";
    40 
    41         // Execute query
    42         if (mysqli_query($con,$sql))
    43         {
    44             echo "Table persons created successfully";
    45             echo '<br>';
    46         }
    47         else
    48         {
    49             echo "Error creating table: " . mysqli_error($con);
    50             echo '<br>';
    51         }
    52 
    53         mysqli_query($con,"INSERT INTO Persons (FirstName, LastName, Age) VALUES ('zyr', 'lsx',24)");
    54         mysqli_query($con,"INSERT INTO Persons (FirstName, LastName, Age) VALUES ('xiaohong', 'xiaoming',30)");    
    55         echo "after INSERT...";
    56         echo "<br>";
    57         findAllPeoples($con);
    58 
    59         echo "find by firstname ...";
    60         echo "<br>";
    61         findPeopleById("zyr",$con);
    62 
    63         mysqli_query($con,"UPDATE Persons SET Age=25 WHERE FirstName='zyr' AND LastName='lsx'");
    64         echo "after UPDATE...";
    65         echo "<br>";
    66         findAllPeoples($con);
    67 
    68         mysqli_query($con,"DELETE  FROM Persons");
    69         echo "after delete...";
    70         echo "<br>";
    71         findAllPeoples($con);
    72         mysqli_close($con);
    73 
    74         function findPeopleById($name,$con){
    75             $result = mysqli_query($con,"SELECT * FROM Persons WHERE FirstName = ". "'" .$name."'");
    76 
    77             while($row = mysqli_fetch_array($result))
    78             {
    79                echo $row['FirstName'] . " " . $row['LastName'] ."  ".$row['Age'];
    80                echo "<br>";
    81             }
    82         }
    83         function findAllPeoples($con){
    84             $result = mysqli_query($con,"SELECT * FROM Persons");
    85 
    86             while($row = mysqli_fetch_array($result))
    87             {
    88                echo $row['FirstName'] . " " . $row['LastName'] ."  ".$row['Age'];
    89                echo "<br>";
    90             }
    91         }
    92     ?> 
    93 
    94 </body>
    95 </html>

        在我们安装的wamp中,mysql数据库默认的用户名为root,密码为空,因此我们可以连接数据库了,除此之外和其它数据库一样,mysql的数据库操作方法,想必大家都是了如指掌的,并且在PHP之中对于所有的sql操作都做了封装,我们只需要修改或者组合简单的sql语句就能够进行创建、删除数据库、表,以及增删改查表中的内容了,到了这一步,我们可以进行简单的封装使得我们的sql语言更加的精致。

        2.1、创建数据库

     1         $con=mysqli_connect("127.0.0.1","root","");
     2         // Check connection
     3         if (mysqli_connect_errno())
     4         {
     5            echo "Failed to connect to MySQL: " . mysqli_connect_error();
     6         }
     7 
     8         // Create database
     9         $sql="CREATE DATABASE zyr_db";
    10         if (mysqli_query($con,$sql))
    11         {
    12             echo "Database zyr_db created successfully";
    13             echo '<br>';
    14             mysqli_close($con);
    15         }
    16         else
    17         {
    18             echo "Error creating database: " . mysqli_error($con);
    19             echo '<br>';
    20         }

      2.2、创建表

     1         $con=mysqli_connect("127.0.0.1","root","","zyr_db");
     2         // Check connection
     3         if (mysqli_connect_errno())
     4         {
     5            echo "Failed to connect to MySQL: " . mysqli_connect_error();
     6            echo '<br>';
     7         }
     8 
     9         // Create table
    10         $sql="CREATE TABLE Persons(FirstName CHAR(30),LastName CHAR(30),Age INT)";
    11 
    12         // Execute query
    13         if (mysqli_query($con,$sql))
    14         {
    15             echo "Table persons created successfully";
    16             echo '<br>';
    17         }
    18         else
    19         {
    20             echo "Error creating table: " . mysqli_error($con);
    21             echo '<br>';
    22         }

        2.3、插入数据

    1         mysqli_query($con,"INSERT INTO Persons (FirstName, LastName, Age) VALUES ('zyr', 'lsx',24)");
    2         mysqli_query($con,"INSERT INTO Persons (FirstName, LastName, Age) VALUES ('xiaohong', 'xiaoming',30)");    
    3         echo "after INSERT...";
    4         echo "<br>";
    5         findAllPeoples($con);

        2.4、查找所有数据

    1         function findAllPeoples($con){
    2             $result = mysqli_query($con,"SELECT * FROM Persons");
    3 
    4             while($row = mysqli_fetch_array($result))
    5             {
    6                echo $row['FirstName'] . " " . $row['LastName'] ."  ".$row['Age'];
    7                echo "<br>";
    8             }
    9         }

        2.5、按条件查找数据

    1         echo "find by firstname ...";
    2         echo "<br>";
    3         findPeopleById("zyr",$con);

         其中findPeopleById("zyr",$con);为:

    1         function findPeopleById($name,$con){
    2             $result = mysqli_query($con,"SELECT * FROM Persons WHERE FirstName = ". "'" .$name."'");
    3 
    4             while($row = mysqli_fetch_array($result))
    5             {
    6                echo $row['FirstName'] . " " . $row['LastName'] ."  ".$row['Age'];
    7                echo "<br>";
    8             }
    9         }

          2.6、更新数据

    1         mysqli_query($con,"UPDATE Persons SET Age=25 WHERE FirstName='zyr' AND LastName='lsx'");
    2         echo "after UPDATE...";
    3         echo "<br>";
    4         findAllPeoples($con);

         2.7、删除数据并且关闭数据库

    1         mysqli_query($con,"DELETE  FROM Persons");
    2         echo "after delete...";
    3         echo "<br>";
    4         findAllPeoples($con);
    5         mysqli_close($con);

         2.8、删除数据库

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Document</title>
     6 </head>
     7 <body>
     8        <?php
     9         $con=mysqli_connect("127.0.0.1","root","");
    10         // Check connection
    11         if (mysqli_connect_errno())
    12         {
    13            echo "Failed to connect to MySQL: " . mysqli_connect_error();
    14         }
    15 
    16         // Create database
    17         $sql="drop DATABASE my_db";
    18         if (mysqli_query($con,$sql))
    19         {
    20             echo "Database zyr_db dropped successfully";
    21             mysqli_close($con);
    22         }
    23         else
    24         {
    25             echo "Error creating database: " . mysqli_error($con);
    26         }
    27         ?>
    28 </body>
    29 </html>

        以上就是数据库相关的操作,使用函数进行相应的封装即可。

       2.9、php和mysql的对应api

    当考虑连接到MySQL数据库服务器的时候,有三种主要的API可供选择:
        PHP的MySQL扩展
        PHP的mysqli扩展
        PHP数据对象(PDO)
    
    PHP的MySQL扩展:
          这是设计开发允许PHP应用与MySQL数据库交互的早期扩展。mysql扩展提供了一个面向过程的接口,并且是针对MySQL4.1.3或更早版本设计的。
    因此,这个扩展虽然可以与MySQL4.1.3或更新的数据库服务端进行交互,但并不支持后期MySQL服务端提供的一些特性。 PHP的mysqli扩展: mysqli扩展,称之为MySQL增强扩展,可以用于使用 MySQL4.1.3或更新版本中新的高级特性。mysqli扩展在PHP 5及以后版本中包含。
    mysqli扩展有一系列的优势,相对于mysql扩展的提升主要有: 面向对象接口 prepared语句支持 多语句执行支持 事务支持 增强的调试能力 嵌入式服务支持 在提供了面向对象接口的同时也提供了一个面向过程的接口。 PDO: PHP数据对象,是PHP应用中的一个数据库抽象层规范。PDO提供了一个统一的API接口可以使得你的PHP应用不去关心具体要连接的数据库服务器系统类型。
    也就是说,如果使用PDO的API,可以在任何需要的时候无缝切换数据库服务器,比如从Firebird 到MySQL,仅仅需要修改很少的PHP代码。
    其他数据库抽象层的例子包括Java应用中的JDBC以及Perl中的DBI。当然,PDO也有它自己的先进性,比如一个干净的,简单的,可移植的API,
    它最主要的缺点是会限制让你不能使用后期MySQL服务端提供所有的数据库高级特性。比如,PDO不允许使用MySQL支持的多语句执行。

         最后我们思考一下,如何在wamp中的mysql之中批量执行sql查询语句呢,这里我们就需要用到mysql的命令行工具了,打开wamp服务器,找到服务器中mysql的按钮,点击之后,选择打开命令行工具,密码默认为空,然后我们创建数据库,并进入数据库之中,之后我们使用source命令来批量执行相应的sql语句。

       更多的关于PHP的mysql接口可以从PHP的官方文档:http://php.net/manual/zh/set.mysqlinfo.php上面获取。

    三、PHP和ajax

        在PHP中使用ajax,我们可以非常方便的进行相应的查询和相应,速度非常的快,这对于我们的动态网页来说是非常方便的。

      3.1、数据查询并显示

       首先让我们看一下客户端代码:

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Document</title>
     6     <script>
     7         function showHint(str)
     8         {
     9             if (str.length==0)
    10             {
    11                 document.getElementById("txtHint").innerHTML="";
    12                 return;
    13             }
    14             if (window.XMLHttpRequest)
    15             {// code for IE7+, Firefox, Chrome, Opera, Safari
    16                 xmlhttp=new XMLHttpRequest();
    17             }
    18             else
    19             {// code for IE6, IE5
    20                 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    21             }
    22             xmlhttp.onreadystatechange=function(){
    23             if (xmlhttp.readyState==4 && xmlhttp.status==200)
    24             {
    25                document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
    26             }
    27             }
    28             xmlhttp.open("GET","gethint.php?q="+str,true);
    29             xmlhttp.send();
    30         }
    31     </script>
    32 </head>
    33 
    34 <body>
    35 
    36     <p><b>在输入框中输入一个姓名:</b></p>
    37     <form>
    38         姓名: <input type="text" onkeyup="showHint(this.value)">
    39     </form>
    40     <p>返回值: <span id="txtHint"></span></p>
    41 
    42 </body>
    43 
    44 </html>

        然后是PHP服务器的代码(gethint.php):

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Document</title>
     6 </head>
     7 <body>
     8         <?php
     9         // 将姓名填充到数组中
    10         $a[]="Anna";
    11         $a[]="Brittany";
    12         $a[]="Cinderella";
    13         $a[]="Diana";
    14         $a[]="Eva";
    15         $a[]="Fiona";
    16         $a[]="Gunda";
    17         $a[]="Hege";
    18         $a[]="Inga";
    19         $a[]="Johanna";
    20         $a[]="Kitty";
    21         $a[]="Linda";
    22         $a[]="Nina";
    23         $a[]="Ophelia";
    24         $a[]="Petunia";
    25         $a[]="Amanda";
    26         $a[]="Raquel";
    27         $a[]="Cindy";
    28         $a[]="Doris";
    29         $a[]="Eve";
    30         $a[]="Evita";
    31         $a[]="Sunniva";
    32         $a[]="Tove";
    33         $a[]="Unni";
    34         $a[]="Violet";
    35         $a[]="Liza";
    36         $a[]="Elizabeth";
    37         $a[]="Ellen";
    38         $a[]="Wenche";
    39         $a[]="Vicky";
    40 
    41         //从请求URL地址中获取 q 参数
    42         $q=$_GET["q"];
    43 
    44         //查找是否由匹配值, 如果 q>0
    45         if (strlen($q) > 0)
    46         {
    47             $hint="";
    48             for($i=0; $i<count($a); $i++)
    49             {
    50                 if (strtolower($q)==strtolower(substr($a[$i],0,strlen($q))))
    51                 {
    52                     if ($hint=="")
    53                     {
    54                         $hint=$a[$i];
    55                     }
    56                     else
    57                     {
    58                         $hint=$hint." , ".$a[$i];
    59                     }
    60                 }
    61             }
    62         }
    63 
    64         // 如果没有匹配值设置输出为 "no suggestion"
    65         // or to the correct values
    66         if ($hint == "")
    67         {
    68             $response="no suggestion";
    69         }
    70         else
    71         {
    72             $response=$hint;
    73         }
    74 
    75         //输出返回值
    76         echo $response;
    77         ?>
    78 </body>
    79 </html>

     

      3.2、网上投票

       客户端文件:

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Document</title>
     6     <script>
     7     function getVote(int)
     8     {
     9         if (window.XMLHttpRequest)
    10         {// code for IE7+, Firefox, Chrome, Opera, Safari
    11             xmlhttp=new XMLHttpRequest();
    12         }
    13         else
    14         {// code for IE6, IE5
    15             xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    16         }
    17         xmlhttp.onreadystatechange=function(){
    18             if (xmlhttp.readyState==4 && xmlhttp.status==200)
    19             {
    20                 document.getElementById("poll").innerHTML=xmlhttp.responseText;
    21             }
    22         }
    23         xmlhttp.open("GET","poll_vote.php?vote="+int,true);
    24         xmlhttp.send();
    25     }
    26     </script>
    27 </head>
    28 <body>
    29     <div id="poll">
    30         <h3>Do you like PHP and AJAX so far?</h3>
    31         <form>
    32             Yes:<input type="radio" name="vote" value="0" onclick="getVote(this.value)">
    33             <br>No:
    34             <input type="radio" name="vote" value="1" onclick="getVote(this.value)">
    35         </form>
    36     </div>
    37 </body>
    38 
    39 </html>

       服务器文件(poll_vote.php):

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Document</title>
     6 </head>
     7 <body>
     8     <?php
     9         $vote = $_REQUEST['vote'];
    10 
    11         //get content of textfile
    12         $filename = "poll_result.txt";
    13         $content = file($filename);
    14 
    15         //put content in array
    16         $array = explode("||", $content[0]);
    17         $yes = $array[0];
    18         $no = $array[1];
    19 
    20         if ($vote == 0)
    21         {
    22         $yes = $yes + 1;
    23         }
    24         if ($vote == 1)
    25         {
    26         $no = $no + 1;
    27         }
    28 
    29         //insert votes to txt file
    30         $insertvote = $yes."||".$no;
    31         $fp = fopen($filename,"w");
    32         fputs($fp,$insertvote);
    33         fclose($fp);
    34     ?>
    35 
    36     <h2>Result:</h2>
    37     <table>
    38         <tr>
    39             <td>Yes:</td>
    40             <td>
    41             <img src="poll.gif" width='<?php echo(100*round($yes/($no+$yes),2)); ?>' height='20'>
    42             <?php echo(100*round($yes/($no+$yes),2)); ?>%
    43             </td>
    44         </tr>
    45         <tr>
    46         <td>No:</td>
    47             <td>
    48             <img src="poll.gif" width='<?php echo(100*round($no/($no+$yes),2)); ?>' height='20'>
    49             <?php echo(100*round($no/($no+$yes),2)); ?>%
    50             </td>
    51         </tr>
    52     </table> 
    53 </body>
    54 </html>

       文件目录:

    四、php+ajax+jQuery

      前端:

      1 <!doctype html>
      2 <html lang="en">
      3 <head>
      4     <meta charset="UTF-8">
      5     <title>评论动态加载</title>
      6     <style type="text/css">
      7         .comment{
      8             background: #FFF;
      9             #border-bottom: red solid;
     10             width: 600px;
     11             height: 80px;
     12         }
     13         .comment div img{
     14             width: 80px;
     15             height: 80px;
     16         }
     17         .left{
     18             float: left;
     19             width: 80px;
     20             height: 80px;
     21             background: blue;
     22         }
     23         .right{
     24             float: right;
     25             width: 520px;
     26             height: 80px;
     27         }
     28         #container{
     29             position: relative;
     30             left: 50%;
     31             width: 600px;
     32             margin-left: -300px;
     33         }
     34         #container ul{
     35             padding-left: 0px;
     36             list-style: none;
     37         }
     38         #more{
     39             background: lightGray;
     40             height: 30px;
     41             line-height: 30px;
     42             text-align: center;
     43             cursor: pointer;
     44         }
     45         #clear{
     46             background: red;
     47             height: 30px;
     48             line-height: 30px;
     49             text-align: center;
     50             cursor: pointer;
     51         }
     52     </style>
     53     <script src="http://libs.baidu.com/jquery/1.10.2/jquery.min.js"></script>
     54 </head>
     55 <body>
     56 <div style="height:300px;"></div>
     57 <div id="container">
     58 <ul id="contentList">
     59     <li class="comment">
     60         <div class="left"><img src="./g1.jpg"></div>
     61         <div class="right">
     62             <div>一篇工作总结</div>
     63             <div>我是内容</div>
     64         </div>
     65     </li>
     66     <hr>
     67     <li class="comment">
     68         <div class="left"><img src="./g.jpg"></div>
     69         <div class="right">
     70             <div>一篇工作总结</div>
     71             <div>我是内容2</div>
     72         </div>
     73     </li>
     74     <hr>
     75     
     76 </ul>
     77 <div id="more">加载更多...</div>
     78 <div id="clear">清零</div>
     79 <input type="hidden" id="last" value="0">
     80 </div>
     81 
     82 <script type="text/javascript">
     83     $(function(){
     84         $('#more').click(function(){
     85             var last = $('#last').val();
     86             var url = './data.php?last='+last+'&amount=2';
     87             queryComment(url);
     88         });
     89         $('#clear').click(function(){
     90             $('#last').val(0);
     91         });
     92     });
     93 
     94     function queryComment(url){
     95         $.ajax({
     96             type : "get",
     97             async: true,
     98             url : url,
     99             dataType : "json",
    100             success : function(data){
    101                 if(data == 1){
    102                     $('#more').html('没有更多评论!').unbind('click');
    103                     return false;
    104                 }
    105                 $.each(data,function(i,element){
    106                     var nickname = element.nickname;
    107                     var content = element.content;
    108                     var time = element.time;
    109                     var imgpath = element.imgpath;
    110                     var info = $('<li class="comment"><div class="left"><img src="'+imgpath+'"></div><div class="right"><div>'+nickname+'</div><div></div>'+content+'</div></li><hr>');
    111                     $('#contentList').append(info);
    112                 });
    113                 var now = parseInt($('#last').val()) + 2;
    114                 $('#last').val(now);
    115             },
    116             error:function(){
    117                 console.log('fail');
    118             }
    119         });
    120     }
    121 </script>
    122 </body>
    123 </html>

        后端:

     1 <?php
     2 
     3 $con=mysqli_connect("127.0.0.1","root","","mydb");
     4 $last = $_GET['last'];
     5 $amount = $_GET['amount'];
     6 
     7 $query=mysqli_query($con,"select * from comment order by id desc limit $last,$amount");
     8 $flag = false;
     9 while ($row=mysqli_fetch_array($query)) {
    10     $flag = true;
    11     $sayList[] = array(
    12         'id'=>$row['id'],
    13         'nickname'=>$row['nickname'],
    14         'content'=>$row['content'],
    15         'imgpath'=>$row['imgpath'],
    16         'time'=>$row['time']
    17       );
    18 }
    19 if($flag){
    20     echo json_encode($sayList);
    21 }else{
    22     echo true;
    23 }
    24 
    25 ?>

      sql语句:

    DROP TABLE IF EXISTS `comment`;
    CREATE TABLE `comment` (
      `id` int(11) NOT NULL ,
      `nickname` varchar(30)  DEFAULT NULL,
      `content` varchar(30)   DEFAULT NULL,
      `imgpath` varchar(30)   DEFAULT NULL,
      `time` datetime DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ;
    
    -- ----------------------------
    -- Records of comment
    -- ----------------------------
    INSERT INTO `comment` VALUES ('1', '1', '23', './g1.jpg', '2015-12-21 17:59:54');
    INSERT INTO `comment` VALUES ('2', '2', '333', './g2.jpg', '2015-12-22 18:00:21');
    INSERT INTO `comment` VALUES ('3', 'zhangsan', 'ceshi3', './g3.jpg', '2015-12-21 17:59:54');
    INSERT INTO `comment` VALUES ('4', 'zhangsan', 'ceshi4', './g4.jpg', '2015-12-21 17:59:54');
    INSERT INTO `comment` VALUES ('5', 'zhangsan', 'ceshi5', './g5.jpg', '2015-12-21 17:59:54');
    INSERT INTO `comment` VALUES ('6', 'zhangsan', 'ceshi6', './g0.jpg', '2015-12-21 17:59:54');
    INSERT INTO `comment` VALUES ('7', 'zhangsan', 'ceshi7', './g2.jpg', '2015-12-21 17:59:54');
    INSERT INTO `comment` VALUES ('8', 'zhangsan', 'ceshi8', './g5.jpg', '2015-12-21 17:59:54');
    INSERT INTO `comment` VALUES ('9', 'zhangsan', 'ceshi9', './g.jpg', '2015-12-21 17:59:54');
    INSERT INTO `comment` VALUES ('10', 'zhangsan', 'ceshi10', './g2.jpg', '2015-12-21 17:59:54');
    INSERT INTO `comment` VALUES ('11', 'zhangsan', 'ceshi11', './g3.jpg', '2015-12-21 17:59:54');
    INSERT INTO `comment` VALUES ('12', 'zhangsan', 'ceshi12', './g4.jpg', '2015-12-21 17:59:54');
    INSERT INTO `comment` VALUES ('13', 'zhangsan', 'ceshi13', './g5.jpg', '2015-12-21 17:59:54');
    View Code

       运行结果:

    五、总结

         我们首先学习了在PHP中如何使用mysql数据库,其次我们学习了PHP中使用ajax的相关技巧,通过上面代码和文档的学习,我们已经有了正式使用PHP的能力了,当然PHP中还有很多其他的功能,在这里我们就不一一列举了。

  • 相关阅读:
    封装Socket.BeginReceive/EndReceive以支持Timeout
    使用反射动态创建类型实例
    泛型List<T>排序(利用反射)
    复旦版最佳医院排行 沪21家医院入选全国百佳
    C#格式化字符串
    一些很酷的.Net技巧
    系列文章--SQLite文章
    C#垃圾回收机制
    C#中Cache的使用
    ASP.NET Cache缓存的使用
  • 原文地址:https://www.cnblogs.com/zyrblog/p/9670173.html
Copyright © 2020-2023  润新知