ezsql 命令详解
主要函数列表:
$db = new db() 初始化一个数据库对象
$db -> select() 选择另一个数据库
$db-> query() 【增删改查】执行一条SQL语句
$db -> get_var() 【查】从数据库的一行(或之前缓存的结果)中取变量 比如sum()
$db -> get_row() 【查】从数据库(或之前缓存的结果)中取一行
$db -> get_col() 【查】按照列设置从查询中取出一列
$db -> get_results() 【查】从数据库(或之前缓存的结果)中取多行
$db -> debug() 输出前一个 sql 查询语句并返回任何存在的结果
$db -> vardump() 输出变量的结构和内容
$db -> get_col_info() 依据列名或类型取得一列或多列的字段信息
$db -> hide_errors() 隐藏错误
$db -> show_errors() 显示错误
$db ->escape() 格式化任何非标准查询字符串
主要变量列表
$db->num_rows – 输出之前对数据库进行查询的影响行数。
$db->insert_id -从之前的insert查询中获取所生成的自增ID。
$db->rows_affected - 获取之前所生效的INSERT,UPDATE,以及DELETE所影响的行数。
$db->num_queries — 对当前代码所生效的查询进行追踪。
$db->debug_all – 如果将这个变量设置为true,它将输出代码中所有的查询和结果。
$db->cache_dir – 设置mysql结果的缓存路径。
$db->cache_queries – 布尔型标示,(详见mysql/disk_cache_example.php)
$db->cache_inserts – 布尔型标示, (see mysql/disk_cache_example.php)
$db->use_disk_cache – 布尔型标示,(see mysql/disk_cache_example.php)
$db->cache_timeout – 以小时为单位计算, (see mysql/disk_cache_example.php)
返回类型 | 主要函数 |
---|---|
bool | $db->query(query) |
var | $db->get_var(query) |
mixed | $db->get_row(query) |
mixed | $db->get_results(query) |
1,$ db = new db
- 初始化一个数据库对象,链接数据库服务器,选择数据库
$ db = new db ( string username, string password, string database name, string database host)
$ db = new db ( 字符串用户名 , 字符串密码 , 字符串数据库名称 , 字符串主机名 )
这个函数完成 3 件事:1. 初始化一个数据库对象 2. 链接数据库服务器 3. 选择数据库。
你可以再次初始化这个函数为新的数据库对象,这意味着你可以同时进行两个并发的数据库连接, 另外,你也可 以在同时连接两个完全不同的数据服务器。
为了提高效率,建议初始化一个数据库对象然后使用 $db ->select 对一个服务器的两个数据库分别进行操作 。
// 初始化数据库对象
$db = new db("user_name", "user_password", "database_name", "database_host");
// 使用查询
$other_db_tables = $db->get_results("SHOW TABLES");
// 你可以对将要连接的数据库进行查询
$db->debug();
// 设置字符集方法1
$db = new ezSQL_pdo('sqlite:my_database.sq3', 'someuser', 'somepassword');
$db->query('SET NAMES utf8mb4'); //设置字符集
// 设置字符集方法2
$encoding = "utf8mb4"; //(看看看就这个)
$db = new ezSQL_mysql($db_user, $db_password, $db_name, $db_host , $encoding);
2,$db ->select
- 使用当前的数据库连接设置,选择一个将使用的数据库.
bool $db -> select(string database name) / 布尔型 $db -> select( 字符串数据库名称 )
经测试,该功能在mysqli模式下可以使用,在PDO模式下不可用
//建立连接(初始化数据库)
$db = new ezSQL_mysqli('db_user','db_password','db_name1','db_host');
// 从A数据库中取出一个数据
$aa = $db->query("SELECT name FROM users1 WHERE id = 22");
// (注意,切换数据库了)选择 db_name2 这个数据库
$db->select("db_name2");
// 从第2个数据库中取出一个数据
$total = $db->query("SELECT * FROM users2 WHERE user='$aa'");
// 重新返回当前数据库并继续当前的工作
$db->select("db_name1");
3,$ db->query
- 对数据库进行一次查询并缓存任何返回结果
bool $ db ->query(string query) / 布尔型 $db -> query(查询字符串)
向当前选择的数据库执行一个查询,要注意的是,你可以通过这个命令执行任何查询命令,任何的返回结果都将被缓存并可以在你执行一个空查询之前所调用,如果有返回结果,该函数的值为true ,若无结果,返回false 。
// 例1
//向数据库中插入新信息
$db -> query( "INSERT INTO users ( id,name ) VALUES (1,'Amy')") ;
// 例2
// 更新数据库信息
$db -> query(“UPDATE users SET name = ‘Tyson’ WHERE id = 1”) ;
// 例3
// 查询整个用户列表
$db->query(“SELECT name,email FROM users”) ;
// 使用一条空查询从缓存里获取第二行数据(0为第一行,1为第二行)
$user_details = $db->get_row(null, OBJECT,1);
// 显示出变量 $user_details 的结构和内容
$db->vardump($user_details);
4,$db -> get_var
- 从数据库的一行(或之前缓存的结果)中取得一个变量
var $db -> getvar (string query / null [, int column offset[, int row offset])
$变量 = $ db -> get var ( 字符串查询 / 空值 )这个函数配合switch和if 判断查询结果是非常有效的,如果查询返回了复数的行,那么将默认 返回第 一行,如果返回了复数的列,那么将默认返回最左边的列,另外, 该查询的结果将可以被$ db -> last_results 以数组的方式取得.
// 例1
// 取出数据库中的用户总数
$usernum = $ db -> get_var ( “SELECT count(*) FROM users”);
// 例2
// 从第2行中取出1个用户的 email 地址(说明,第一行,第一列,默认 起始值 为0)
$user_email = $db->get_var( “SELECT name, email FROM users”,1,1) ;
// 从缓存中取出之前的第二行
$user = $db -> get_row (null,OBJECT,1);
// 结果一样
echo $ user_email ; echo $user->email;
// 例3
// 找出有多少个名叫amy的用户
if ($n = $db -> get_var(“SELECT count(*) FROM users WHERE name = ‘Amy’”) )
{
// 如果有用户被返回的话,将输出一个 true 供IF判断
echo “有 $n 个人叫 Amy!”;
}
else
{
// 如果没有用户返回,这里将判断为 false
echo “没有人叫 Amy. ”;
}
// 例4
//与数据库中存储的密码比对 一个从 submit 事件中得到的密码
if ( $pwd_from_form == $db -> get_var (“SELECT pwd FROM users WHERE name = ‘$ name_ from_form ’”) )
{
// 又一次我们在取出数据的同时进行了比较
echo “登录成功!”;
}
else
{
// 如果判断为 false
echo “用户ID或密码错误!”;
}
5, $db -> get_row
- 从数据库(或之前缓存的结果)中取出一行
object $db ->get_ row(string query / null [, OBJECT / ARRAY_A / ARRAY_N [, int row offset]])
返回对象 $db -> get_ row(字符串查询 / 空值( OBJECT / ARRAY_A / ARRAY_N [, 行号] 三个可选参数 )
从数据库(或之前缓存的结果)中取出一行 ,如果查询得到的结果多于一行 ,将默认输出第一行,同时该查询的结果将被缓存以备其他 ezsql 查询使用。
// 从数据库中获取用户名和邮件地址,并将它放入一个叫 USER 的对象。
$user = $db -> get_row( “SELECT name,email FROM users WHERE id = 22”) ;
// 输出值
echo “$user->name 的邮箱为 $user->email”;
// 输出结果
Amy 的邮箱为 amy@foo.com
// 例2
// 从数据库中取出用户名和时间并放入关联数组
// 注意,我们需要设置行的索引值以使用该参数,使用 uxix 时间戳确保结果
$user = $db -> get_ row ("SELECT name, UNIX_TIMESTAMP( my_date_joined) as joined FROM users WHERE id=1",ARRAY_A);
// 创建可访问的对象或关联数组,在这个例子中,$user['joined']是对象 $user->joined
echo $user['name']."加入我们在".date("m/d/y",$user['joined']);
// 输出
Amy 加入我们在 05/02/01
// 例3 接例2
// 从缓存中取出第二行
$user = $ db -> get_ row ( null,OBJECT,1) ;
// 注意:默认值为0
echo “$user->name 加入我们在” . date("m/d/ y",$user->joined );
// 输出:
Tyson加入我们在 05/02/02
// 例4
// 以数值数组方式取值
$user = $db -> get_row("SELECT name,email,address FROM users WHERE id = 1",ARRAY_N);
// 以表的方式输出结果
echo "<table>";
for ( $i=1; $i<= count($user); $i++ )
{
echo "< tr ><td>$i</td><td>$user[$i]</td></ tr >";
}
echo "</table>";
// 输出结果:
1 amy
2 amy@foo.com
3 某某路123号
6,$ db -> get_col
- 按照列设置从查询中取出一列
$ db -> get_ col ( string query / null [, int column offset] )
$ db -> get_ col ( 字符串查询 / 参数 )
将设定的一列的值取出并放入一个一维数组中,如果没有参数,将返回第 1 列(数组下界从 0 开始) 注意,如果当前查询为空将提取前一个查询的第一列作为结果.
// 例1
// 将产品表存入数组并输出来,
foreach ( $db -> get_col(“SELECT product FROM product_list”) as $product)
{
echo $product;
}
// 例2
// 使用之前缓存的结果
// 将结果存入数组 $users
$users = $db -> get_ results ( “SELECT * FROM users”);
// 计算其中的列数
$ last_col_num = $db->num_cols - 1;
// 从缓存结果中输出最后一列
foreach ( $db->get_col(null, $last_col_num) as $last_col )
{
echo $ last_col ;
}
7,$db -> get_results
- 从数据库(或之前缓存的结果)中取多的行
array $db -> get_results ( string query / null [, OBJECT / ARRAY_A / ARRAY_N ] )
返回 数 组(对 象 ),可 选 参数 OBJECT / ARRAY_A / ARRAY_N
用查询从数据库中取出多行并转存为多维数组,数组中的每个元素包含一行结果,且可以以对象、数值数组、关联数组的方式调用,如果没有查询结果,该函数可以返回 false 供逻辑判断。
// 例1 ,以对象方式返回结果
// 以对象方式返回查询结果是最快的取得结果的方法,同时他也可以用 $object->var这个方法非常快速的取到结果而且不用担心PHP的解析错误。
// 将结果放入数组 $users 同时判断其中的任何结果
if ($users = $db -> get_results(“SELECT name, email FROM users”))
{
// 通过索引 $users[n]循环整个数组
foreach ( $users as $user )
{
// 依靠列名取得数据并保存到关联数组的键值中
echo “$user->name - $user->email <br>”;
}
}
else
{
// 如果没有用户返回则输出false
echo “没有用户数据”;
}
// 输出结果
Amy - amy@hotmail.com
Tyson - tyson@hotmail.com
// 例2 ,以关联数组方式返回结果
// 以关联数组方式返回数据有助于你动态获取结果。
// 将数据存入数组 $dogs(and evaluate if there are any results at the same time)
if ($dogs = $db -> get_results ("SELECT breed,owner,name FROM dogs", ARRAY_A))
{
// 以 $dogs[n] 为索引循环数组
foreach ( $dogs as $ dog_detail )
{
// 循环赋值给数组
foreach ( $ dogs_detail as $key => $ val )
{
//以键名和 键值 的方式取得数据
echo “$key : $val”;
}
// 输出换行标签
echo '< br >';
}
}
else
{
// 如果没有任何结果输出将得到 false
echo “No dogs found.”;
}
Output:
Breed: Boxer Owner: Amy Name: Tyson
Breed: Labrador Owner: Lee Name: Henry
Breed: Dachshund Owner: Mary Name: Jasmine
// 例3
// 以数值数组方式返回结果
// 将结果以数值数组方式输出有利于使用动态方式查询结果并取出变量的列名(0,1,2,3 … ),但依然需要手段使我们取得结果,这里是一个例子告诉我们如何使用它 。
// 创建一个保存动物类别的关联数组
$animal = array ( “fish” => “num_fins”, “dog” => “num_legs” );
// 创建一个动态查询供使用
if ($results = $db->get_results(“SELECT $animal[$type] FROM $type”,ARRAY_N))
{
foreach ($results as $result)
{
echo “$result[0]< br >”;
}
}
else
{
echo “No $animal\s!”;
}
输出结果:
4
4
// 动态查询其实是这个样子的
· SELECT num_fins FROM fish
· SELECT num_legs FROM dogs
8,$db ->debug
- 输出前一个 sql 查询并返回任何存在的结果
$ db -> debug( void)
$ db -> debug( )
// 例1
// 如果你需要知道你上一个查询得到了什么,你可以这么做。
// 将结果存入数组 $users
$users = $ db -> get_ results ( “SELECT name, email FROM users”);
// 查看它是如何执行的!
$ db -> debug();
9,$db -> vardump
- 输出变量的结构和内容
$ db -> vardump ( void)
$ db -> vardump ( ) 输出变量的结构和内容,可以无视所输出的变量的类型(对象,关联数组,或数值数组 )
// 例1
// 如果你想知道这个变量的结构和值,你可以这么做
// 将结果放入数组 $users.
$users = $ db -> get_ results ( “SELECT name, email FROM users”);
// 输出数组 $users. 的结构和内容。
$ db -> vardump ( $users);
10,$ db -> get_col_info
- 依据列名或类型取得一列或多列的字段信息
$ db -> getcol info ( string info-type[, int column offset])
$ db -> get_col_info (字符串,信息类型 / 参数 ])
依据列名或类型返回目标的一列或多列的信息,如果没有指定所要获取的信息类别,将输出默认的类别 name ,如果 没有没有列参数设定将默认输出所有列信息,如需要访问所有的目标信息,你可以使用这个调用缓存的方式 $db->col_info 。
// 可用的信息类别mySQL
·name-列名称
·table-该列所在的表名称
·max_length-该列的最大长度
·not_null-判断该列不能为空
·primary_key-判断该列是否为主键
·unique_key-判断该列是否为唯一键(unique_key)
·multiple_key-判断该列是否为唯一键,输出结果与上一个相反
·numeric-判断该列是否为数值
·blob-判断该列是否为(binarylargeobject),二进制大对象(百科:http://baike.baidu.com/view/1438508.htm?fr=ala0_1_1)
·type-列的类型
·unsigned-判断列是否为无符号类型(百科
http://baike.baidu.com/view/2067328.htm?fr=ala0_1)
·zerofill-判断列是否为zerofill类型(可能是得到之前的无符号结果(百度说的))
ibase
·name-列名称
·type-列的类型
·length-该列的长度
·alias–undocumented(这个不认识,百度说是“无证明的”,晕。。)
·relation–undocumented(这个不认识,百度说是“无证明的”,晕。。)
MS-SQL/Oracle/Postgress
·name-列名称
·type-列的类型
·length-该列的长度
SQLite
·name-列名称
// 例1
// 将结果存入数组 $users
$users = $db -> get_ results ( “SELECT id, name, email FROM users”);
// 按照列的类别输出列名
foreach ($db -> get_col_info ("name") as $name)
{
echo “$name< br >”;
}
Output:
id name email
// 例2
// 将结果存入数组 $users
$users = $db ->get_ results("SELECT id, name, email FROM users");
// 查看所有目标列的信息
$ db -> vardump ( $db->col_info);
11,$db -> hide_errors
- 关闭 ezsql 的错误输出
$ db -> hide_ errors ( void )
$db->hide_errors() 停止向客户端输出 ezsql 的错误提示,如果你希望在关闭错误提示后依然能够得到调试的错误信息或你自己的错误提示函数,你可以使用全局数组 $EZSQL_ERROR 得到错误提示。
如果没有任何错误的话,全局数组 $EZSQL_ERROR 将置为 false ,如果有任何错误的话,将存入数组以备调用。
// 例1
// 使用一个常规的错误函数
$db -> hide_errors();
// 使用一个错误的查询来制造一个错误信息。
$db -> query(“INSERT INTO my_table A BAD QUERY THAT GENERATES AN ERROR”);
// 再制造一个错误 用另一个来做对照
$db -> query(“ANOTHER BAD QUERY THAT GENERATES AN ERROR”);
// 如果全局错误数组存在,我们将得到这里存在一个或多个 ezsql 的错误 。
if ($EZSQL_ERROR)
{
// 查看错误
$db -> vardump ( $EZSQL_ERROR);
}
else
{
echo “No Errors”;
}
12,$db -> show_errors
- 打开 ezsql 的错误输出
$ db -> show_ errors ( void )
$ db -> show_ errors ( ) -打开 ezsql 的错误输出,在未使用函数 $db -> hide_errors 之前,此函数无效 。
13,$db ->escape
- 格式化任何非标准 PHP 查询
$ db -> escape( string )
$ db -> escape( ) 格式化任何非标准 PHP 查询使之适用于 PHP 环境
附加:无视 magic quotes (自动转义 )
注意:不可用于防范 sql 注入攻击,该函数仅用于格式化非标准查询(比如带有’符号的内容)。
// 例1
// 格式化值
$title = $db -> escape(“Justin’s and Amy’s Home Page”);
// 插入数据库
$ db -> query( “INSERT INTO pages (title) VALUES (’$title’)”);
// 分配值
$title = “Justin’s and Amy’s Home Page”;
// 在插入数据库的时候格式化它
$db -> query( “INSERT INTO pages (title) VALUES (’”. $ db -> escape( $title).”’)”);
缓存相关
Disk Caching
Ezsql 可以缓存你的查询使动态网站能运行的更快,如果你希望缓存所有结果,可以这么做:
$ db -> use_disk_cache = true;
$ db -> cache_queries = true;
$ db -> cache_timeout = 24;
你可以查看以下文件来得到该参数的进一步信息:
· mysql / disk_cache_example.php
· oracle8_9/ disk_cache_example.php
PS:所有中文翻译从网上搜索获得,版权归原作者所有.