php数据库访问技术结论 PHP访问数据库

PHP访问MySQL数据库的步骤。

PHP访问MySQL数据库:

公司主营业务:成都网站建设、成都做网站、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联推出晋州免费做网站回馈大家。

因为连接数据库需要较长的时间和较大的资源开销,所以如果在多个网页中都要频繁地访问数据库,则可以建立与数据库的持续连接。即调用mysql_pconnect()代替mysql_connect()。

基本步骤:

1.连接服务器:mysql_connect();

2.选择数据库:mysql_select_db();

3.执行SQL语句:mysql_query();

查询:select

显示:show

插入:insert into

更新:update

删除:delete

4.关闭结果集:mysql_free_result($result);

5.关闭数据库:mysql_close($link);

简单叙述PHP应用程序在访问数据库时的简单步骤?

以mysql为例

字段:userid,username,password,email

1.连接数据库:$conn=mysql_connect("localhost","username","password");

2.选择数据库:$db=mysql_select_db("databaseName",$conn);

3.构造sql语句:$sql="select * from userinfo";

4.执行查询:$result=mysql_query($sql);

5.读取数据:$row=mysql_fetch_query($result);

6.循环显示读取数据:

while($row){

echo $row["username"];

echo $row["password"];

echo $row["email"];

……

$row=mysql_fetch_query($result);

}

PHP多次访问数据库,是否有优化方案

我只针对你这个做优化吧。。

第一个不要用select * 这样的sql语句,你需要什么字段就写哪些字段

都需要的话,你都写出来,select * 效率很低的。。

第二个如果说你的后台中对这些数据的变动不是很频繁

然后你可以将查询结果存入memcahe中

我写一段伪代码

$mem_key="all";

$res = $memcache-get($mem_key);

//如果没有存入memcache中

if (empty($res){

//sql语句可以用left jion on关联查询

$aaa="select b.字段1,b.字段2...from btb as b left jion tb as b.id=t.id";

$bb=$mysql-_query($aaa);

while(!!$_rows=$mysql-_fetch_array_list($bb)){

//do something

$res ....

}

//结果存入memecahed中

$memcache-set($mem_key,$res,0,超时时间);

}

$res就是你获取的结果。。

你这段代码基本可以这样。。

Web数据库的访问技术

Web数据库访问技术通常是通过三层结构来实现的。目前建立与Web数据库连接访问的技术方法可归纳为CGI技术,ODBC技术和ASP、JSP、PHP技术。

CGI技术

CGI(Common Gateway Interface,通用网关界面)是一种Web服务器上运行的基于Web浏览器输入程序的方法,是最早的访问数据库的解决方案。CGI程序可以建立网页与数据库之间的连接,将用户的查询要求转换成数据库的查询命令,然后将查询结果通过网页返回给用户。

CGI程序需要通过一个接口才能访问数据库。这种接口多种多样,数据库系统对CGI程序提供了各种数据库接口如Perl、C/C++、VB等。为了使用各种数据库系统,CGI程序支持ODBC方式,通过ODBC接口访问数据库。

ODBC技术

ODBC(Open Database Connectivity,开放数据库互接)是一种使用SQL的应用程序接口(API)。ODBC最显著的优点就是它生成的程序与数据库系统无关,为程序员方便地编写访问各种DBMS的数据库应用程序提供了一个统一接口,使应用程序和数据库源之间完成数据交换。ODBC的内部结构为4层:应用程序层、驱动程序管理器层、驱动程序层、数据源层。它们之间的关系如图1-5所示。由于ODBC适用于不同的数据库产品,因此许多服务器扩展程序都使用了包含ODBC层的系统结构。

Web服务器通过ODBC数据库驱动程序向数据库系统发出SQL请求,数据库系统接收到的是标准SQL查询语句,并将执行后的查询结果再通过ODBC传回Web服务器,Web服务器将结果以HTML网页传给Web浏览器,工作原理如图1-6所示。

由于Java语言所显示出来的编程优势赢得了众多数据库厂商的支持。在数据库处理方面,Java提供的JDBC为数据库开发应用提供了标准的应用程序编程接口。与ODBC类似,JDBC也是一种特殊的API,是用于执行SQL语句的Java应用程序接口。它规定了Java如何与数据库之间交换数据的方法。采用Java和JDBC编写的数据库应用程序具有与平台无关的特性。

ASP、JSP、PHP技术

ASP是Microsoft开发的动态网页技术,主要应用于Windows NT+IIS或 Windows 9x+PWS平台。确切地说ASP不是一种语言,而是Web服务器端的开发环境。利用ASP可以产生和运行动态的、交互的、高性能的Web服务应用程序。ASP支持多种脚本语言,除了VBScript和Pscript,也支持Perl语言,并且可以在同一ASP文件中使用多种脚本语言以发挥各种脚本语言的最大优势。但ASP默认只支持VBScript和Pscript,若要使用其他脚本语言,必须安装相应的脚本引擎。ASP支持在服务器端调用ActiveX组件ADO对象实现对数据库的操作。在具体的应用中,若脚本语言中有访问数据库的请求,可通过ODBC与后台数据库相连,并通过ADO执行访问库的操作。关于ASP的编程技术将会在第7章中详细介绍。

JSP是Sun公司推出的新一代Web开发技术。作为Java家族的一员,几乎可以运行在所有的操作系统平台和Web服务器上,因此JSP的运行平台更为广泛。目前JSP支持的脚本语言只有Java。JSP使用JDBC实现对数据库的访问。目标数据库必须有一个JDBC的驱动程序,即一个从数据库到Java的接口,该接口提供了标准的方法使Java应用程序能够连接到数据库并执行对数据库的操作。JDBC不需要在服务器上创建数据源,通过JDBC、JSP就可以实现SQL语句的执行。

PHP是Rasmus Lerdorf推出的一种跨平台的嵌入式脚本语言,可以在Windows、UNIX、Linux等流行的操作系统和IIS、Apache、Netscape等Web服务器上运行,用户更换平台时,无需变换PHP代码。PHP是通过Internet合作开发的开放源代码软件,它借用了C、Java、Perl语言的语法并结合PHP自身的特性,能够快速写出动态生成页面。PHP可以通过ODBC访问各种数据库,但主要通过函数直接访问数据库。PHP支持目前绝大多数的数据库,提供许多与各类数据库直接互连的函数,包括Sybase、Oracle、SQL Server等,其中与SQL Server数据库互连是最佳组合。

为什么 PHP 应该使用 PDO 方式访问数据库

很多程序员都学习过如何使用 MySQL 或 MySQLi 扩展访问数据库。在 PHP 5.1 中,有一个更好的方法。 PHP Data Objects (PDO) 提供了很多预处理语句的方法,且使用对象将使你的工作更有成效!

PDO 介绍

“PDO – PHP Data Objects – 是一个对多种数据库提供统一操作方法的数据库访问层。”

它并不具备数据库特有的语法,但它将使切换数据库和平台更加容易,多数情况下,只需要简单修改链接字符串。

这并非一篇完整教导如何使用SQL的教程。它重要为那些现今仍在使用 mysql 或 mysqli 扩展的人,帮助他们跃至更具可移植性和强力的 PDO。

数据库支持

此扩展可以使用 PDO 驱动编写过的所有数据库。在本文书写时,下面的数据库支持已经实现:

PDO_DBLIB ( FreeTDS / Microsoft SQL Server / Sybase )

PDO_FIREBIRD ( Firebird/Interbase 6 )

PDO_IBM ( IBM DB2 )

PDO_INFORMIX ( IBM Informix Dynamic Server )

PDO_MYSQL ( MySQL 3.x/4.x/5.x )

PDO_OCI ( Oracle Call Interface )

PDO_ODBC ( ODBC v3 (IBM DB2, unixODBC and win32 ODBC) )

PDO_PGSQL ( PostgreSQL )

PDO_SQLITE ( SQLite 3 and SQLite 2 )

PDO_4D ( 4D )

你的系统不会也不必支持所有上面的驱动;下面是一个快速检查所支持数据库的方法:

1 print_r(PDO::getAvailableDrivers());

连接

不同数据库的连接方法可能稍有不同,下面是一些较为流行的数据库连接方法。你将注意到,虽然数据库类型不同,前三种数据库的连接方式是相同的——而 SQLite 使用自己的语法。

Connection String

01 try {

02  # MS SQL Server andSybase with PDO_DBLIB

03  $DBH = newPDO("mssql:host=$host;dbname=$dbname, $user, $pass");

04  $DBH = newPDO("sybase:host=$host;dbname=$dbname, $user, $pass");

05

06  # MySQL with PDO_MYSQL

07  $DBH = newPDO("mysql:host=$host;dbname=$dbname", $user, $pass);

08

09  # SQLite Database

10  $DBH = newPDO("sqlite:my/database/path/database.db");

11 }

12 catch(PDOException $e) {

13    echo$e-getMessage();

14 }

注意 try/catch 块——你应该总是使用 try/catch 包装你的 PDO 操作,并使用异常机制——这里只是简单的示例。通常,你只需要一个连接——有很多可以教你语法的列表。 $DBH 代表“数据库句柄”,这将贯穿全文。

通过将句柄设置为 NULL,你可以关闭任一连接。

1 # close the connection

2 $DBH = null;

你可以在PHP.net找到更多数据库特定选项和/或其它数据库连接字符串的信息。

异常与 PDO

PDO 可以使用异常处理错误,这意味着你的所有 PDO 操作都应当包装在一个 try/catch 块中。你可以通过设定错误模式属性强制 PDO 在新建的句柄中使用三种错误模式中的某一个。下面是语法:

1 $DBH-setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT );

2 $DBH-setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );

3 $DBH-setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

无论你设定哪个错误模式,一个错误的连接总会产生一个异常,因此创建连接应该总是包装在 try/catch 块中。

PDO::ERRMODE_SILENT

这是默认的错误模式。如果你使用这个模式,你将得使用同 mysql 或 mysqli 扩展一样的方法差错。其它两种模式更适合 DRY 编程。

PDO::ERRMODE_WARNING

此方法将会发出一个标准PHP警告,并允许程序继续运行。这对调试很有帮助。

PDO::ERRMODE_EXCEPTION

这是多数情况下你所希望的方式。它生成异常,允许你更容易的处理错误,隐藏可能导致它人了解你系统的信息。下面是一个充分利用异常的示例:

01 # connect to the database

02 try {

03  $DBH = newPDO("mysql:host=$host;dbname=$dbname", $user, $pass);

04  $DBH-setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

05

06  # UH-OH! Typed DELECT instead of SELECT!

07  $DBH-prepare('DELECT name FROM people');

08 }

09 catch(PDOException $e) {

10    echo"I'm sorry, Dave. I'm afraid I can't do that.";

11    file_put_contents('PDOErrors.txt', $e-getMessage(), FILE_APPEND);

12 }

在 select 语句中有一个故意留下的错误;这将导致一个异常。异常错误细节保存至一个 log 文件,并生成一段友好的(或不怎么友好的)信息於用户。

插入和更新

插入新数据,更新已存数据是一种非常常见的数据库操作。使用 PDO,这通常需要两个步骤。本节中所述的所有内容对更新和插入都有效。

这里有一个最基本的插入示例:

1 # STH means "Statement Handle"

2 $STH = $DBH-prepare("INSERT INTO folks ( first_name ) values ( 'Cathy' )");

3 $STH-execute();

你也可以使用 exec() 完成相同的操作,这将减少调用。多数情况下,你会使用调用多的方法,以充分利用语句预处理的优势。即使你只用它一次,使用语句预处理,帮助你保护你的 SQL 免于注入攻击。

预处理语句

使用语句预处理将帮助你免于SQL注入攻击。

一条预处理语句是一条预编译的 SQL 语句,它可以使用多次,每次只需将数据传至服务器。其额外优势在于可以对使用占位符的数据进行安全处理,防止SQL注入攻击。

你通过在 SQL 语句中使用占位符的方法使用预处理语句。下面是三个例子:一个没有占位符,一个使用无名占位符,一个使用命名占位符。

1 # no placeholders - ripe for SQL Injection!

2 $STH = $DBH-("INSERT INTO folks (name, addr, city) values ($name, $addr, $city)");

3

4 # unnamed placeholders

5 $STH = $DBH-("INSERT INTO folks (name, addr, city) values (?, ?, ?);

6

7 # named placeholders

8 $STH = $DBH-("INSERT INTO folks (name, addr, city) value (:name, :addr, :city)");

你希望避免第一种方法。选择命名我无名占位符将会对你对语句中数据的设置产生影响。

无名占位符

01 # assign variables to each place holder, indexed 1-3

02 $STH-bindParam(1, $name);

03 $STH-bindParam(2, $addr);

04 $STH-bindParam(3, $city);

05

06 # insert one row

07 $name = "Daniel"

08 $addr = "1 Wicked Way";

09 $city = "Arlington Heights";

10 $STH-execute();

11

12 # insert another row with different values

13 $name = "Steve"

14 $addr = "5 Circle Drive";

15 $city = "Schaumburg";

16 $STH-execute();

这里有两步。首先,我们对各个占位符指定变量(2-4行)。然后,我们对各个占位符指定数据,并执行语句。要发送另一组数据,只需改变这些变量的值并再次执行语句。

这种方法看上去对拥有很多参数的语句很笨拙吧?的确。然而,当数据保存于数组中时,这非常容易简略:

1 # the data we want to insert

2 $data = array('Cathy', '9 Dark and Twisty Road', 'Cardiff');

3

4 $STH = $DBH-("INSERT INTO folks (name, addr, city) values (?, ?, ?);

5 $STH-execute($data);

容易吧!

数组中的数据按顺序填入占位符中。 $data[0]是第一个,$data[1]是第二个,依次。不过,要是数组中数据的次序不正确,这将不能正常运行,你需要先对数组排序。

命名占位符

你可能已经开始猜测语法了,不过下面就是示例:

1 # the first argument is the named placeholder name - notice named

2 # placeholders always start with a colon.

3 $STH-bindParam(':name', $name);

你可以看使用快捷方式,但它需使用关联数组。下面是示例:

1 # the data we want to insert

2 $data = array( 'name' = 'Cathy', 'addr' = '9 Dark and Twisty', 'city' = 'Cardiff' );

3

4 # the shortcut!

5 $STH = $DBH-("INSERT INTO folks (name, addr, city) value (:name, :addr, :city)");

6 $STH-execute($data);

数组中的键不需要以冒号开头,但其它部分需要同占位符匹配。如果你有一个二维数组,你只需遍历它,并对遍历的每个数组执行语句。

命名占位符的另一个好的功能是直接将对象插入到你的数据库中,只要属性同命名字段匹配。下面是一个示例对象,以及如何将它插入到数据库中的示例:

01 # a simple object

02 class person {

03    public $name;

04    public $addr;

05    public $city;

06

07    function __construct($n,$a,$c) {

08        $this-name = $n;

09        $this-addr = $a;

10        $this-city = $c;

11    }

12    # etc ...

13 }

14

15 $cathy = new person('Cathy','9 Dark and Twisty','Cardiff');

16

17 # here's the fun part:

18 $STH = $DBH-("INSERT INTO folks (name, addr, city) value (:name, :addr, :city)");

19 $STH-execute((array)$cathy);

通过在执行时将对象转换为数组,输将将会同数组的键一样对待。

php读取数据库信息的几种方法

连接到一个 url 地址为localhost 、 端口为 3306 的mysql服务器上。mysql服务器的帐号是"root",密码是"9999"。mysql 服务器上有一个数据库 ok , 数据库里有一个表 abc。表 abc 一共为两列,列名分别是 "id" 和 "name" ,将 abc 里的所有数据读出来。

$dbh = @mysql_connect("localhost:3306","root","9999"); 

/* 定义变量dbh , mysql_connect()函数的意思是连接mysql数据库, "@"的意思是屏蔽报错 */ 

if(!$dbh){die("error");} 

/* die()函数的意思是将括号里的字串送到浏览器并中断PHP程式 (Script)。括号里的参数为欲送出的字串。 */ 

@mysql_select_db("ok", $dbh); 

/* 选择mysql服务器里的一个数据库,这里选的数据库名为 ok */ 

$q = "SELECT * FROM abc"; 

/* 定义变量q, "SELECT * FROM abc"是一个SQL语句,意思是读取表abc中的数据 */ 

br / 

!--========= 方法一 =========-- 

br / 

$rs = mysql_query($q, $dbh); 

/* 定义变量 rs ,函数mysql_query()的意思是:送出 query 字串供 MySQL 做相关的处理或者执行.由于php是从右往左执行的,所以,rs的值是服务器运行mysql_query()函数后返回的值 */ 

if(!$rs){die("Valid result!");} 

echo "table"; 

echo "trtdID/tdtdName/td/tr"; 

while($row = mysql_fetch_row($rs)) echo "trtd$row[0]/tdtd$row[1]/td/tr"; 

/* 定义量变(数组)row,并利用while循环,把数据一一写出来.  

函数mysql_fetch_row()的意思是:将查询结果$rs单列拆到阵列变数中.  

$row[0] 和 $row[1] 的位置可以换*/ 

echo "/table"; 

br / 

!--========= 方法二 =========-- 

br / 

$rs = mysql_query($q, $dbh); 

while($row = mysql_fetch_object($rs)) echo "$row-id $row-name br /"; 

/* id和name可以换位置 */ 

br / 

!--========= 方法三 =========-- 

br / 

$rs = mysql_query($q, $dbh); 

while($row = mysql_fetch_array($rs)) echo "$row[id] $row[name] br /"; 

/* id和name可以换位置 */ 

!--========= 方法三最快 =========-- 

@mysql_close($dbh); 

/* 关闭到mysql数据库的连接 */ 

?


本文题目:php数据库访问技术结论 PHP访问数据库
分享链接:http://scyanting.com/article/docejps.html