原文:PHP 16: MySql的数据库访问

本章介绍PHP访问MySql的方法。
如果你对MySQL不是很清晰,可以参看PHP 17: MySQL的简单介绍
对于数据库的操作,无非就是以下几个点:

  • 如何连接到数据库
  • 如何执行SQL
  • 如何返回数据结果集
  • 如何从结果集取出数据
  • 关闭连接

以上就是数据库的常规操作。
对于MySQL而言,由于其版本不同,访问数据库的方法也不同。PHP4有个MySQL一般的访问方法,过程都是以"mysql_"为前缀的。当到了PHP5,除了它,还扩展了这个方法。并且以2种形式表现,一种是面向对象的,一种是以"mysqli_"开头的过程函数。
以下介绍的将分为面向对象以及过程方法来描述。

建立一个连接

面向对象的连接
我们可以用以下语句来建立MySQL的连接

 @ $db=new mysqli('localhost','root','pwd','mysql');

简单描述以下,这里建立一个mysqli的类,它传入mysql所在的主机名,然后是用户名,用户密码,以及访问的数据库。

过程方法的连接
上面对应的过程方法是

 @ $db=mysqli_connect('localhost','root','pwd','mysql');

此函数返回的不是一个对象,而是一个连接数据的资源。如果你使用过程方法,必须将资源传递到mysqli的所有其他函数。
在这里需要说明的是mysqli的大多数过程函数都有一个对应的面向接口。通常情况下,过程函数都是以mysqli_开始的,同时需要传入mysqli_connect返回的数据库连接资源。
尝试连接的结果需要检查,万一不成功也好做出相应的处理呀。对于此,可以实用mysqli_connect_errno()来处理。
代码可以如下

<?php
 @ $db=new mysqli('localhost','root','password','mysql');
 if(mysqli_connect_errno())
 {
      echo 'Error: Can not connect to database.';
  }
  else
  {
      echo 'Connect to database OK';
  }
  
?> 

或者

   ?> 

mysqli_connect_errno()将返回一个连接数据库出现的错误代码,如果连接成功,返回0.

选择使用的数据库

在SQL里面,我们可以使用如下SQL来选择数据库

use mysql

那么在PHP里呢?我们可以使用如下代码:

 $db->select_db(dbname)//dbname为你选择的数据库

或者

 mysqli_select_db(db_resource,dbname)//db_resource就是前面提到的数据库的连接资源


执行SQL语句

要查询数据库,我们可以使用mysql_query()函数,在进行此操作前最好把你的sql建立以下,例如

$query="select * from bookmark where bm_url like 'abc'";

需要说明的一点是,这里不需要在SQL语句后加一个分号,这和在MySQL监视器里是不一样的。
现在我们可以调用以下的方式来执行SQL语句。

$result=$db->query($query)

以上是面向对象的方法,过程方法可以为:

$result=mysqli_qurey($db,$query)

面向对象版本返回一个结果对象,过程版本返回一个资源。无论何种方法,都会降结果保存在一个变量里($result)中,这个函数执行失败,将返回false。Ok,给个实例吧。

                               

或者


";
/* Select queries return a resultset */
if ($result = mysqli_query($db,$sql)) {
   printf("Select returned %d rows.\n", $result->num_rows);

   /* free result set */
    mysqli_free_result($result);
}

if ($result = mysqli_query($db,"SELECT * FROM mybookmark", MYSQLI_USE_RESULT)) {

   if (mysqli_query($db,"SET @a:='this will not work'")) {
       printf("Error: %s\n", $db->error);
   }
   mysqli_free_result($result);
}

mysqli_close($db);
?> 
  

简单吧。

对查询结果的处理
首先确定结果集的行数。我们可以利用下面的代码实现它。

$num_rows=$result->num_rows;

$num_rows=mysqli_num_rows($result)

得到了结果的行数之后,我们就可以处理每个结果了。例如可以有以下代码:

     }

为了得到每一行,我们可以调用$result->fetch_assoc()函数或者mysqli_fetch_assoc().如果函数没有返回行,循环将会停止执行。可以为:

$row=$result->fetch_assoc()

$row=mysqli_fetch_assoc($result)

来实现,如果你曾经在VC里用ODBC操作数据库的话,你会发现有些类似。
那么,我想得到每一列值怎么办呢?很简单,调用

$row['bm_url']

字符串'bm_url'就是列名。
除了上面的方法还有没有其他方法得到每一行呢?还有2种方法:
1) 获取每一行的枚举数组
    可以为

$row=$result->fetch_row()

$row=mysqli_fetch_row($result)

属性值就是每个数组值,例如$row[0],$row[1]等。

2) 还有一种方法就是将每行返回到一个对象里。
  可以为
    $row=$result->fetch_object()
   或

$row=mysqli_fetch_object($result)

如果访问个列值,实用$row->username,$row->bm_url
  
断开数据库连接
在前面已经见到了,
结果集的释放:

$result->free().

或者

mysqli_free_result($result)

.
数据库的关闭:

$db->close()

或者

mysql_close($db)

使用Prepared语句
 这个功能有点类似.net SqlParameter.
 先举个例子

       $stmt->close();

解释一下。
line 1,需要注意的是2个问号。表示每个数据的位置。在C#里确实@+列名。
line 2:调用$db->prepare()构建一个需要处理的资源,过程函数是mysqli_stmt_prepare().
line 3:调用stmt->bind_param将相应的值绑定到相应的位置上。过程函数是mysqli_stmt_bind_param.
line 4:执行语句。
需要注意的是,在PHP5RC2版本里,Windows下执行有时会crash掉,但在unix下却运行正常。

PHP 16: MySql的数据库访问的更多相关文章

  1. Python数据库访问公共组件及模拟Http请求

    前言 最近一段时间除了忙于工作之外,在业余时,迷上了python,对它的跨平台深深的吸引.经过一段时间的自我学习,了解了其基本的语法,便开始自己着手摆弄起来.主要想把以前对接的接口再实现一次,以便于在 ...

  2. 我的基于asp.net mvc5 +mysql+dapper+easyui 的Web开发框架(1)数据库访问(0)

    一.数据库访问 概述 1. 数据库使用mysql,orm采用dapper框架.dapper框架应用简单,只是需要自己手写sql语句,但是对于像我这样写了多年sql语句的人来说,这应该不算问题,个人还是 ...

  3. PHP MySql数据库访问

    PHP MySql数据库访问 计应134   凌豪 1.MySql数据库的连接 要操作MySql数据库,首先必须与MySQl数据库建立连接,连接MySQL服务器的语句如下: <?php$link ...

  4. Python数据库访问之SQLite3、Mysql

    Python数据库访问之SQLite3.Mysql 现有的数据库管理系统有很多种,本文选择介绍两种DBMS:SQLite 3 和 Mysql. SQLite 3 SQLite 3是Python 3预装 ...

  5. Spring+Mybatis+Mysql搭建分布式数据库访问框架

    一.前言 用Java开发企业应用软件, 经常会采用Spring+MyBatis+Mysql搭建数据库框架.如果数据量很大,一个MYSQL库存储数据访问效率很低,往往会采用分库存储管理的方式.本文讲述如 ...

  6. 【Mysql数据库访问利器】phpMyadmin

    缘由 我们程序员难免要和数据库打交道,经过这几年的锻炼,感觉手写SQL语句已经忘记的差不错了,促使我一定要这篇文章的原因是,有一次晚上我更新某个系统的数据库的表(由于目前公司比较严格,数据库都只能通过 ...

  7. R的数据库访问-MySQL

    目录 1 RMySQL 2 环境与安装 3 建立通信 1 RMySQL R作为一款数据分析的工具,,而MySQL是一款常用的开源关系型数据库软件,非常适用于中小型的数据存储,当二者相互结合时才能爆发出 ...

  8. 五十九 数据库访问 使用MySQL

    MySQL是Web世界中使用最广泛的数据库服务器.SQLite的特点是轻量级.可嵌入,但不能承受高并发访问,适合桌面和移动应用.而MySQL是为服务器端设计的数据库,能承受高并发访问,同时占用的内存也 ...

  9. C#---数据库访问通用类、Access数据库操作类、mysql类 .[转]

    原文链接 //C# 数据库访问通用类 (ADO.NET)using System;using System.Collections.Generic;using System.Text;using Sy ...

随机推荐

  1. android详情请务必保持手机屏幕不锁屏

    今天做这个项目采用了非常有趣的东西,互联网搜索下一个轮廓,需求就是点击一个按钮来锁定屏幕让屏幕不亮. 几个测试.我们发现以下措辞如此简单, getWindow().addFlags(WindowMan ...

  2. Centos 6.5下一个SNMP简单配置(snmp protocol v3,监控宝)

    Centos 6.5下一个SNMP简单配置(snmp protocol v3.监控宝) jom_ch@2014/7/25 1,安装 >yum -y install net-snmp net-sn ...

  3. AsyncHandler

    package com.ango.deskclock; import android.content.Context; import android.content.Intent; import an ...

  4. linux如果不进入window磁盘

    最近,在windows8.1下安装ubuntu14.04,在windows沉睡.开放时间和进入选择进入系统选项,当时没有引起重视.他选择进入linux系统.但进入后,发现无法进入windows磁盘,百 ...

  5. 使用Eclipse设定Android开发环境

    使用Eclipse设定Android开发环境 花了大概几天的时间最终搭建好了开发Android的环境了! 我是使用Eclipse +ADT顺利地搭建Android开发环境的. 如今Google以及An ...

  6. 在Mac OS上配置Android开发环境

    1)安装配置NDK 1.1 下载NDK并解压缩 下载路径 https://developer.android.com/tools/sdk/ndk/index.html 在terminal运行: chm ...

  7. 敏感字符串加密处理(PHP实现)

    /** * 敏感字符串加密处理 * @param $raw_str 原始字符串 * @param $before 前面保留的显示位数 * @param $after 后面保留的显示位数 * @para ...

  8. UVA 11987 - Almost Union-Find(并查集)

    UVA 11987 - Almost Union-Find 题目链接 题意:给定一些集合,操作1是合并集合,操作2是把集合中一个元素移动到还有一个集合,操作3输出集合的个数和总和 思路:并查集,关键在 ...

  9. NYoj WAJUEJI which home strong!(简单搜索)

    题目链接:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=1100 这道题,自己初写搜索,给学长气的只打我,Orz....... 搜索的思路要理 ...

  10. 离github在导入dubbo工程

    dubbo移动到github目前已经有一些时间,我们可能根本不习惯使用github.因此,我们仍然使用以前的版本号. 由于某些原因.阿里下载前关闭.在这里给大家提供一个私有地址: 链接:http:// ...