php连接数据库并动态显示数据库记录

 更新时间:2016年11月25日 15:02  点击:1286
本文章来给php初学者介绍一个不错的php mysql入门实例,我们连接数据库并实现显示出数据库中的记录实例,各位朋友可参考。

连接到一个 MySQL 数据库

在您能够访问并处理数据库中的数据之前,您必须创建到达数据库的连接。

在 PHP 中,这个任务通过 mysql_connect() 函数完成。

语法

mysql_connect(servername,username,password);

在下面的例子中,我们在一个变量中 ($con) 存放了在脚本中供稍后使用的连接。如果连接失败,将执行 "die" 部分:

 代码如下 复制代码

<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

// some code

?>

有了上面基础之后我们就可以查询数据库并显示了

 代码如下 复制代码


<?php
mysql_connect("localhost","root","");
mysql_select_db("cinema");
$_sql="select * from `t_hall`";
mysql_query("set names utf8");//编码设置为utf8
$query=mysql_query($_sql);
echo "<table align='center' border='1' cellspacing='0' width='550' >";
echo "<tr><td>影厅编号</td><td>大厅名</td><td>座位行</td><td>座位列</td></tr>";
while($row=mysql_fetch_array($query))
{
//从数据库查询出来的字段
//将数据放到html的表格中

echo "<tr onclick='GetText()'><td>{$row['HID']}</td><td>{$row['HHall']}</td><td>{$row['HSeatline']}</td><td>{$row['HSeatrow']}</td></tr>";
}
echo "</table>";
?>

面向对象在我看来就是各种php类,方法,函数了,下面我来给大家介绍一篇关于php面向对象入门教程,各位同学有兴趣可参考。

第一种情况:子类没有定义构造函数时,默认继承。

第二种情况:子类定义了构造函数,则不会被继承。

对于4.x,如果父类恰好定义了子类的同名函数,则会被当做子类的构造函数:

 代码如下 复制代码

class A
{
    function A()
    {
      echo "I am the constructor of A.<br>n";
    }

    function B()
    {
        echo "I am a regular function named B in class A.<br>n";
        echo "I am not a constructor in A.<br>n";
    }
}

class B extends A
{
    function C()
    {
        echo "I am a regular function.<br>n";
    }
}

//php4 will call B()
$b = new B;

上面的代码在php5中则会调用A而不会调用B()

PHP面向对象:接口实例

们设计一个在线销售系统,用户部分设计如下:

将用户分为,NormalUser, VipUser, InnerUser三种。

要求根据用户的不同折扣计算用户购买产品的价格。

并要求为以后扩展和维护预留空间。

用户部分先声明了一个接口User,用户都是User的实现。

user.php

 代码如下 复制代码

<?
/*
* 定义了 User接口.
* 和子类 NormalUser,VipUser,InnerUser
*/
//User接口,定义了三个抽象方法.
interface User{
 public function getName();
 public function setName($_name);
 public function getDiscount();
}
abstract class AbstractUser implements User{
 private $name = ""; //名字
 protected  $discount = 0; //折扣
 protected  $grade = "";  //级别
 
 public function __construct($_name){
  $this->setName($_name);
 }
 public function getName(){
  return $this->name;
 }
 public function setName($_name){
  $this->name = $_name;
 }
 public function getDiscount(){
  return $this->discount;
 }
 
 public function getGrade(){
  return $this->grade;
 }
}
class NormalUser extends AbstractUser  { 
 protected  $discount = 1.0;
 protected  $grade = "NormalUser";
}

class VipUser extends AbstractUser {
 protected  $discount = 0.8;
 protected  $grade = "VipUser";
}

class InnerUser extends AbstractUser {
 protected  $discount = 0.7;
 protected  $grade = "InnerUser";
}
?>

关于产品,我们进行了如下设计。

声明一个接口Product,然后从Product继承下Book接口。

在线销售的图书最后是实现了Book接口的BookOnline类。

Product.php

 代码如下 复制代码

<?
/*与产品相关的类放.*/
Interface Product{ //定义产品接口
 public function getProductName();
 public function getProductPrice();
}

interface Book extends Product { // book是产品的一个分类
 public function getAuthor();
}

class BookOnline implements Book{ // 定义book类.
 private $productName;  // 产品名
 private $productPrice; // 产品价格
 private $author;  //作者
 
 public function __construct($_bookName){
  $this->productName = $_bookName;
  //这里放置相关初始化的代码.
  //与数据库关联的代码.
 }
 
 public function getProductName(){
  return $this->productName;
 }
 
 public function getProductPrice(){
  //这里从数据库读取价格.
  //假设价格是 100元.
  $this->productPrice = 100;
  return $this->productPrice;
 }
 
 public function getAuthor(){
  //从数据库里面取值.
  return $this->author;
 } 
}
?>

关于结算,我们使用了独立的结算类,使用静态方法做计算。产品结算。注意参数类型。

 代码如下 复制代码

<?
include_once("User.php");
include_once("Product.php");
//买了产品到底多少钱呢?
class ProductSettle{
 public static function  finalPrice(User $_user,Product $_product,$number = 1){
  $price = $_user->getDiscount() * $_product->getProductPrice() * $number;
  return $price;
 }
}
?>

下面的例子是实现。大家可以自己分析下。

 代码如下 复制代码

<?
include_once("./class/User.php");
include_once("./class/Product.php");
include_once("./class/ProductSettle.php");

$number = 10;
$book = new BookOnline("设计模式");


$user = new NormalUser("Tom");
$price = ProductSettle::finalPrice($user,$book,$number);
$str =  "您好,尊敬的用户 " . $user->getName() . " <br>";
$str .= "您的级别是 ". $user->getGrade() .", <br>";
$str .= "您的折扣是 " . $user->getDiscount() . "<br>";
$str .= "购买 $number 本 《 ". $book->getProductName() ;
$str .=  "》的价格是 $price <br><br>";
echo $str;


$user = new vipUser("Tom");
$price = ProductSettle::finalPrice($user,$book,$number);
$str =  "您好,尊敬的用户 " . $user->getName() . " <br>";
$str .= "您的级别是 ". $user->getGrade() .", <br>";
$str .= "您的折扣是 " . $user->getDiscount() . "<br>";
$str .= "购买 $number 本 《 ". $book->getProductName() ;
$str .=  "》的价格是 $price <br><br>";
echo $str;

$user = new InnerUser("Tom");
$price = ProductSettle::finalPrice($user,$book,$number);
$str =  "您好,尊敬的用户 " . $user->getName() . " <br>";
$str .= "您的级别是 ". $user->getGrade() .", <br>";
$str .= "您的折扣是 " . $user->getDiscount() . "<br>";
$str .= "购买 $number 本 《 ". $book->getProductName() ;
$str .=  "》的价格是 $price <br><br>";
echo $str;
?>

在php中获取当前页面完整地址是需要通过各种函数与参考组合起来的,包括域名或主机地址 网页地址 网址参数 用户代理 端口号等。

基于函数了解


PHP实现:

 代码如下 复制代码

//获取域名或主机地址
echo $_SERVER['HTTP_HOST']."<br>"; #localhost

//获取网页地址
echo $_SERVER['PHP_SELF']."<br>"; #/blog/testurl.php

//获取网址参数
echo $_SERVER["QUERY_STRING"]."<br>"; #id=5

//获取用户代理
echo $_SERVER['HTTP_REFERER']."<br>";

//获取完整的url
echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'];
#http://localhost/blog/testurl.php?id=5

//包含端口号的完整url
echo 'http://'.$_SERVER['SERVER_NAME'].':'.$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
#http://localhost:80/blog/testurl.php?id=5

//只取路径
$url='http://'.$_SERVER['SERVER_NAME'].$_SERVER["REQUEST_URI"];
echo dirname($url);

实例

 代码如下 复制代码

/**
 * 获取当前页面地址
 *
 * @author 111cn.net
 */
function getPageUrl() {
 $pageURL = 'http';

 if ($_SERVER["HTTPS"] == "on") {
  $pageURL .= "s";
 }
 $pageURL .= "://";

 if ($_SERVER["SERVER_PORT"] != "80") {
  $pageURL .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"];
 } else {
  $pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
 }
 return $pageURL;
}

在php中url处理函数有很多,如有:http_build_query,compact,urldecode、urlencode,parse_url,rawurldecode等等函数。

http_build_query

(PHP 5) http_build_query — 生成 URL-encode 之后的请求字符串

 代码如下 复制代码

<?php
$data = array('foo'=>'bar',
'baz'=>'boom',
'cow'=>'milk',
'php'=>'hypertext processor');echo http_build_query($data); // foo=bar&baz=boom&cow=milk&php=hypertext+processor
?>


compact

array compact ( mixed $varname [, mixed $... ] )
(PHP 4, PHP 5)  compact — 建立一个数组,包括变量名和它们的值

 代码如下 复制代码

<?php
$city  = "San Francisco";
$state = "CA";
$event = "SIGGRAPH";
$result = compact("city", "state", "event");
// array('city'=>'"San Francisco"','state'=>'CA','event' => "SIGGRAPH")
?>
-------------

$qs=compact('province','city','name');
foreach($qs as $key => $value){
    if(!$value){
        unset($qs[$key]);
    }
}
$url='something/search/?'.http_build_query($qs) ;


urldecode、urlencode
下面来看介绍与实例。
parse_url($str url);
把url转换成数组

 代码如下 复制代码

*/
print_r(parse_url("www.111cn.net"));       //解析url并输出返回数组

/*

url 专用格式字符串还原成普通字符串。

语法: string rawurldecode(string str);

返回值: 字符串

函数种类: 编码处理
 
内容说明


本函数将字符串解码。从 url 的字符串专用格式解成普通字符串。详细的编码解码信息及规格文件可以参考 rfc 1738。

 代码如下 复制代码

*/

echo rawurldecode('foo%20bar%40baz');      //输出foo bar@baz
/*

string rawurlencode ( string str )


返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数。这是在 rfc 1738 中描述的编码,是为了保护原义字符以免其被解释为特殊的 url 定界符,同时保护 url 格式以免其被传输媒体(像一些邮件系统)使用字符转换时弄乱。例如,如果你想在 ftp 的 url 中包含密码:

 

 代码如下 复制代码

*/
$str="http://www.111cn.net";       //定义字符串
$result=rawurlencode($str);      //对指定字符串编码
echo $result;

/*
urldecode()
url解码
*/         //输出结果

$str="http%3a%2f%2fwww.111cn.net";
$result=urldecode($str);
echo $result;

/*
urlencode()
url编码

*/

$str="http://www.111cn.net";       //定义字符串
$result=urlencode($str);       //对指定字符串编码
echo $result;         //输出结果

在php中遍历循环读出数组的方法有几种,foreach,for,list,each,while都是可以的,只是那种更适合用来遍历数组了。

foreach来访问, 遍历的顺序是固定的么? 以什么顺序遍历呢?

比如:

 代码如下 复制代码

<?php
$colors= array('red','blue','green','yellow');
foreach ($colors as $color){
//add your codes
}
?>

例2

$capitals= array("Ohio"=> "Columbus","Towa"=> "Des Moines","Arizona"=> "Phoenix");
foreach($capitals as  $key=> $val){
//add your codes
}
 

while()

while() 通常和 list(),each()配合使用。

#example2:

 代码如下 复制代码

<?php
$colors = array('red','blue','green','yellow');

while(list($key,$val) = each($colors)) {
 echo "Other list of $val.<br />";
}
?>

显示结果:

Other list of red.
Other list of blue.
Other list of green.
Other list of yellow.

3. for()
#example3:

 代码如下 复制代码


<?php
$arr = array ("0" => "zero","1" => "one","2" => "two");

for ($i = 0;$i < count($arr); $i++) {
 $str = $arr[$i];
 echo "the number is $str.<br />";
}
?>
显示结果:

the number is zero.
the number is one.
the number is two.

========= 以下是函数介绍 ==========

key()
mixed key(array input_array)

key()函数返回input_array中位于当前指针位置的键元素。

#example4

 代码如下 复制代码


<?php
$capitals = array("Ohio" => "Columbus","Towa" => "Des Moines","Arizona" => "Phoenix");
echo "<p>Can you name the capitals of these states?</p>";
while($key = key($capitals)) {
 echo $key."<br />";
 next($capitals);
//每个key()调用不会推进指针。为此要使用next()函数
}
?>

Can you name the capitals of these states?
Ohio
Towa
Arizona

each() 函数遍历数组

例子 1

 代码如下 复制代码

<?php
$people = array("Peter", "Joe", "Glenn", "Cleveland");
print_r (each($people));
?>

输出:

Array ( [1] => Peter [value] => Peter [0] => 0 [key] => 0 )

子 2
each() 经常和 list() 结合使用来遍历数组。本例与上例类似,不过循环输出了整个数组:

 代码如下 复制代码

<?php
$people = array("Peter", "Joe", "Glenn", "Cleveland");

reset($people);

while (list($key, $val) = each($people))
  {
  echo "$key => $val<br />";
  }
?>

输出:

0 => Peter
1 => Joe
2 => Glenn
3 => Cleveland


多维数组的递归遍历

 代码如下 复制代码

<?php
/*
*  -------------------------------------------------
*   Author :
*   Url    : www.111cn.net*   Date   : 2011-03-09
*  -------------------------------------------------
*/
function arr_foreach ($arr)
{
 if (!is_array ($arr))
 {
  return false;
 }
 
 foreach ($arr as $key => $val )
 {
  if (is_array ($val))
  {
   arr_foreach ($val);
  }
  else
  {
   echo $val.'<br/>';
  }
 }
}

$arr1 = array (1=>array(11,12,13,14=>array(141,142)),2,3,4,5);

echo '<pre>';
print_r($arr1);
echo '<pre>';

arr_foreach ($arr1);
?>

结果

Array
(
    [1] => Array
        (
            [0] => 11
            [1] => 12
            [2] => 13
            [14] => Array
                (
                    [0] => 141
                    [1] => 142
                )

        )

    [2] => 2
    [3] => 3
    [4] => 4
    [5] => 5
)
11
12
13
141
142
2
3
4
5

[!--infotagslink--]

相关文章

  • PHP 数据库缓存Memcache操作类

    操作类就是把一些常用的一系列的数据库或相关操作写在一个类中,这样调用时我们只要调用类文件,如果要执行相关操作就直接调用类文件中的方法函数就可以实现了,下面整理了...2016-11-25
  • ps动态环绕动画效果怎么制作

    ps动态环绕动画效果是现在很多人都非常喜欢的,大多数人还不知道ps动态环绕动画效果怎么制作下面文章就给大家介绍下ps怎么制作科技感十足的动态环绕动画效果,一起来看看...2017-07-06
  • C#连接SQL数据库和查询数据功能的操作技巧

    本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
  • C#从数据库读取图片并保存的两种方法

    这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
  • Intellij IDEA连接Navicat数据库的方法

    这篇文章主要介绍了Intellij IDEA连接Navicat数据库的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借价值,需要的朋友可以参考下...2021-03-25
  • vue 实现动态路由的方法

    这篇文章主要介绍了vue 实现动态路由的方法,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-06
  • 在数据库里将毫秒转换成date格式的方法

    在开发过程中,我们经常会将日期时间的毫秒数存放到数据库,但是它对应的时间看起来就十分不方便,我们可以使用一些函数将毫秒转换成date格式。 一、 在MySQL中,有内置的函数from_unixtime()来做相应的转换,使用如下: 复制...2014-05-31
  • C#操作本地文件及保存文件到数据库的基本方法总结

    C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
  • 如何解决局域网内mysql数据库连接慢

    通过内网连另外一台机器的mysql服务, 确发现速度N慢! 等了大约几十秒才等到提示输入密码。 但是ping mysql所在服务器却很快! 想到很久之前有过类似的经验, telnet等一些服务在连接请求的时候,会做一些反向域名解析(如果...2015-10-21
  • MySQL快速复制数据库数据表的方法

    某些时候,例如为了搭建一个测试环境,或者克隆一个网站,需要复制一个已存在的mysql数据库。使用以下方法,可以非常简单地实现。假设已经存在的数据库名字叫db1,想要复制一份,命名为newdb。步骤如下:1. 首先创建新的数据库newd...2015-10-21
  • mysqldump命令导入导出数据库方法与实例汇总

    mysqldump命令的用法1、导出所有库系统命令行mysqldump -uusername -ppassword --all-databases > all.sql 2、导入所有库mysql命令行mysql>source all.sql; 3、导出某些库系统命令行mysqldump -uusername -ppassword...2015-10-21
  • Mysql数据库错误代码中文详细说明

    1005:创建表失败1006:创建数据库失败1007:数据库已存在,创建数据库失败1008:数据库不存在,删除数据库失败1009:不能删除数据库文件导致删除数据库失败1010:不能删除数据目录导致删除数据库失败1011:删除数据库...2013-09-23
  • c#异步读取数据库与异步更新ui的代码实现

    这篇文章主要介绍了c#从数据库里取得数据并异步更新ui的方法,大家参考使用吧...2020-06-25
  • c#动态调用Webservice的两种方法实例

    这篇文章介绍了c#动态调用Webservice的两种方法实例,有需要的朋友可以参考一下...2020-06-25
  • Yii2.0高级框架数据库增删改查的一些操作

    yii2.0框架是PHP开发的一个比较高效率的框架,集合了作者的大量心血,下面通过用户为例给大家详解yii2使用中的一些基本的增删改查操作。 User::find()->all(); //返回所有用户数据; User::findOne($id); //返回 主键...2015-11-24
  • springBoot 项目排除数据库启动方式

    这篇文章主要介绍了springBoot 项目排除数据库启动方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-10
  • MYSQL数据库使用UTF-8中文编码乱码的解决办法

    1.用phpmyadmin创建数据库和数据表 创建数据库的时候,请将“整理”设置为:“utf8_general_ci” 或执行语句: 复制代码 代码如下:CREATE DATABASE `dbname` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 创...2015-10-21
  • SQL Server中执行动态SQL

    本文详细讲解了SQLServer中执行动态SQL的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2022-05-19
  • Vue实现动态查询规则生成组件

    今天我们来给大家介绍下在Vue开发中我们经常会碰到的一种需求场景,本文主要介绍了Vue动态查询规则生成组件,需要的朋友们下面随着小编来一起学习学习吧...2021-05-27
  • C#中动态显示当前系统时间的实例方法

    想在网页中动态地显示当前系统的时间,找了好多,不过都是一些停在那里不动的。。。不过皇天不负有心人,终于让我找到了...2020-06-25