PEAR DB 初学笔记
1、数据查询
i. DB_common::getAll() DB_FETCHMODE_ORDERED 、 DB_FETCHMODE_ASSOC 、 DB_FETCHMODE_OBJECT
ii. DB_common::getRow()
iii. DB_common::getAssoc()
iv. DB_common::getCol()
v. DB_common::getOne()
1 <!-- 2 PHP PEAR DB类部分函数说明:更多函数可参考pear/db.php和pear/db/common.php 3 connect():数据库链接函数 4 query():SQL语句执行函数 5 execute():SQL语句执行函数,与query()函数使用方式略有不同,具体可参考pear/db/common.php文件 6 setFetchMode():设定返回记录集是数字索引数组还是关联数组或者对象 7 numRows():返回记录集有多少行 8 numCols():返回记录集有多少列 9 free():释放记录集 10 disconnect():关闭数据库链接 11 affectedRows():操作影响的记录行数 12 isManip():判断一个查询是数据处理还是数据定义操作 13 14 --> 15 16 <?php 17 //引入PDB库 18 require_once("DB.php"); 19 //设定访问的数据库、登录名、密码、主机 20 $userName = 'root'; 21 $password = 'a12345'; 22 $hostName = 'localhost'; 23 $dbName = 'db_chengxl'; 24 //设定DSN参数,并进行数据库链接,我连接的数据库为Mysql 25 $dsn = "mysql://$userName:$password@$hostName/$dbName"; 26 27 $dbCon = DB::connect($dsn); 28 //错误处理 29 if (DB::isError($dbCon)) { 30 die ($dbCon->getMessage()); 31 } 32 33 //创建数据表,并插入测试数据 34 /* 35 $sql = "CREATE TABLE cxl (" . 36 "`id` INT( 11 ) UNSIGNED NOT NULL ," . 37 "`name` VARCHAR( 30 ) CHARACTER SET gbk COLLATE gbk_chinese_ci NOT NULL ," . 38 "`age` INT( 2 ) NOT NULL ," . 39 "`birthday` VARCHAR( 30 ) CHARACTER SET gbk COLLATE gbk_chinese_ci NOT NULL ," . 40 "`sex` INT( 1 ) NOT NULL ," . 41 "PRIMARY KEY ( `id` )" . 42 ") ENGINE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci"; 43 44 $result = $dbCon->query($sql); 45 46 if (DB::isError($result)) { 47 die ($result->getMessage()); 48 49 } 50 51 $sql = "insert into cxl(id,name,age,birthday,sex) values(1,'cxl',1,'2009-05-13',1),(2,'cxl',1,'2009-05-13',1),(3,'cxl',1,'2009-05-13',1)"; 52 53 $result = $dbCon->query($sql); 54 55 if (DB::isError($result)) { 56 die ($result->getMessage()); 57 }*/ 58 59 60 //setFetchMode函数是PHP PEAR DB让用户设定返回记录集是数字索引数组还是关联数组或者对象, 61 //此处我设定为关联数组的形式。默认DB_FETCHMODE_ORDERED模式, 62 //其他两种模式为DB_FETCHMODE_ASSOC与DB_FETCHMODE_OBJECT 63 64 //获取数据 65 /* 66 $dbCon->setFetchMode(DB_FETCHMODE_ASSOC); 67 68 $sql = "select * from cxl"; 69 70 $result = $dbCon->query($sql); 71 72 73 if (DB::isError($result)) { 74 die ($result->getMessage()); 75 } 76 77 for ($i = 0; $i < $result->numRows(); $i++) { 78 $info = &$result->fetchRow(); 79 80 echo "name:" . $info['name']; 81 echo "birthday:" . $info['birthday'] . "<br>"; 82 } 83 */ 84 85 86 87 //总数 88 /* 89 * $colCount = $result->numCols(); 90 * echo "<tr><td colspan=\"".$colCount."\">共找到".$result->numRows()."位用户</td></tr>"; 91 */ 92 93 94 //function &getOne($query, $params = array()) 95 //执行查询,并返回结果集中第一行第一列的数据。$params是参数值,如果后端数据库支持,将调用prepare/execute来使用这些参数。 96 97 /* 98 $sql = "select * from cxl"; 99 $last = $dbCon->getOne($sql); 100 if(DB::isError($last)){ 101 echo "出错:".DB::errorMessage($last); 102 } 103 echo "id:".$last;*/ 104 105 //function &getAll($query, $fetchmode = DB_FETCHMODE_DEFAULT, $params = array()) 106 //返回包含结果集中全部记录的数组。注意,如果你的结果集很大,不要使用这个函数。 107 /* 108 $sql ="select * from cxl limit 1000"; 109 $list = $dbCon->getAll($sql); 110 if(DB::isError($list)){ 111 die( "数据库错误:".DB::errorMessage($list)); 112 } 113 for ($i=0;$i<count($list);$i++){ 114 $user = $list[$i]; 115 echo "<tr>"; 116 for($j=0;$j<count($user);$j++){ 117 echo "<td>".$user[$j]."</td>"; 118 } 119 echo "</tr>"; 120 } 121 */ 122 123 124 //function &getCol($query, $col = 0, $params = array()) 125 //执行查询,并返回包含结果集中指定字段列的值的数组。 126 //$col是要返回的列的索引,可以是整数,或者是关键字段名。 127 /*$sql = "select id ,age,name from cxl order by age desc limit 100"; 128 $row = $dbCon->getCol($sql,1); 129 if(DB::isError($row)){ 130 echo "出错:".DB::errorMessage($row); 131 } 132 for($i=0;$i<count($row);$i++){ 133 echo "<tr>$row[$i]</tr>"; 134 }*/ 135 136 137 //function &getRow($query, $fetchmode = DB_FETCHMODE_DEFAULT, $params = array()) 138 //执行查询,请返回结果集的第一条记录。 139 //$fetchmod 指定fetch模式,如果省略,使用缺省模式。 140 141 /* 142 $sql = "select * from cxl order by id desc"; 143 $row = $dbCon->getRow($sql); 144 if(DB::isError($row)){ 145 echo "出错:".DB::errorMessage($row); 146 } 147 for($i=0;$i<count($row);$i++){ 148 echo "<td>$row[$i]</td>"; 149 } 150 */ 151 152 153 //function &getAssoc($query, $force_array = false, $params = array()) 154 //执行查询,并返回一个关联数组。 155 //$force_arry 强制返回数组。如果true,那么即使你的结果集里只有2个字段,那么关键字段对应的值也是一个只有一个元素的 156 //数组。如果false,那么关键字段对应的值是一个标量了。 157 /* 158 $sql = "select id,name,age from cxl limit 100"; 159 $userinfo = $dbCon->getAssoc($sql); 160 if (DB::isError($userinfo)) { 161 die("错误!" . DB::errorMessage($userinfo)); 162 } 163 //var_dump($userinfo); 164 if (empty($userinfo)) { 165 echo "warning:NO users!"; 166 return; 167 168 } 169 170 $info = $userinfo['2']; 171 if (empty($info)) { 172 echo "没有这个用户信息!"; 173 } 174 print_r($info); 175 //var_dump($info); 176 */ 177 178 179 180 //自动增长(Sequences) 181 //Sequences 为数据行提供独一无二的ID标识。如果熟悉MySQL之类的话,可以把它想象为AUTO_INCREMENT.它非常简单, 182 //首先你获取一个ID,然后在这个ID所在的行插入你所需要记录的数据。可以为你的表设置更多的Sequences, 183 //只需要保证在任何特殊的表中都使用一样的sequence就行。 184 185 // Get an ID (if the sequence doesn't exist, it will be created) 186 $id = $dbCon->nextId(cxl); 187 $sql = "insert into cxl(id,name,age,birthday,sex) values($id,'cxl',1,'2009-05-13',1)"; 188 189 // Use the ID in your INSERT query 190 //$res = $dbCon->query("INSERT INTO cxl (id,name) VALUES ($id,'foo')"); 191 $res = $dbCon->query($sql); 192 if(DB::isError($res)){ 193 echo "出错:".DB::errorMessage($res); 194 } 195 196 echo "<tr><td>当前插入数据的ID:$id</td></tr>"; 197 198 199 200 //释放 201 $result->free(); 202 //关闭连接 203 $dbCon->disconnect(); 204 205 ?>
2、数据插入、更新:autoExecute()
1 <?php 2 //引入PDB库 3 require_once("DB.php"); 4 //设定访问的数据库、登录名、密码、主机 5 $db = &DB::connect('mysql://root:a12345@localhost/db_chengxl'); 6 //错误处理 7 if (DB::isError($db)) { 8 die ($db->getMessage()); 9 } 10 $table_name = 'user'; 11 12 //插入的数据 13 $fields_values = array( 14 'id' => '1', 15 'name' => 'Darlin', 16 'country' => 'Acewill', 17 ); 18 //修改的数据 19 $fields1_values = array( 20 // 'id' => '1', 21 // 'name' => 'Darlin', 22 'country' => 'ACEWILL'//这里填写希望修改后的数据, 23 ); 24 //Using autoExecute() in insert mode 25 //$res = $db->autoExecute($table_name, $fields_values, DB_AUTOQUERY_INSERT); 26 27 //Using autoExecute() in update mode 28 $res = $db->autoExecute($table_name, $fields1_values, DB_AUTOQUERY_UPDATE); 29 30 //用这个方法没有效果 31 //$res = $db->autoExecute($table_name, $fields_values, DB_AUTOQUERY_UPDATE, "country = 'Japan'"); 32 if (PEAR::isError($res)) { 33 die($res->getMessage()); 34 } else { 35 echo "操作成功!</br>"; 36 } 37 38 ?>
以上资料均来源网络,
PHP PEAR DB类安装与使用实例详解:http://www.alixixi.com/program/a/2011101775410.shtml
PEAR:创建中间的数据库应用层1:http://www.alixixi.com/program/a/2008020831340.shtml
PEAR:创建中间的数据库应用层2:http://www.alixixi.com/program/a/2008020831341.shtml