MySql数据库AdoDB函数实例详解(1/3)
1.GetAll方法我们可以使用GetAll方法代替Execute()方法,该方法返回的结果为一个二维关联数据,这样可以使用foreach或for循环语句处理,非常方便。另外,GetAll取得的数组与Smarty模板的foreach配合得非常好。
我们一起看下面的脚本例子:
代码如下 | |
<?php include_once("libs/adodb/adodb.inc.php"); // 创建一个mysql连接实例对象 $db = NewADOConnection("mysql"); // 打开一个数据库连接 $db->Connect("localhost", "root", "root", "library") or die("Unable to connect"); // 构造并执行一个查询 $query = "SELECT * FROM library"; $result = $db->GetAll($query) or die("Error in query: $query. " . $db->ErrorMsg()); // 清除无用的对象 $db->Close(); // 可以使用print_r打印该数组的内容 // print_r($result); exit(0); // 遍历记录集,显示列的内容:TITLE 和AUTHOR foreach ($result as $row){ echo $row[1] . " - " . $row[2] . "n"; } // 取得和显示返回的记录行数 echo "n[" . sizeof($result) . " 行记录被返回]n"; ?> |
GetAll()方法取得记录集后,产生一个二维数组,类似于下面的样子:
Array
(
[0] => Array
(
[0] => 14
[id] => 14
[1] => Mystic River
[title] => Mystic River
[2] => Dennis Lehane
[author] => Dennis Lehane
)
[1] => Array
(
[0] => 15
[id] => 15
[1] => For Kicks
[title] => For Kicks
[2] => Dick Francis
[author] => Dick Francis
)
//下略
)
我们在数组一章,提到过这类混合数组最适合用foreach来处理。这种方法是对Execute()方法的补充或替代,尤其适合在遍历查询整个表时使用。
另外,ADODB还提供取得一条记录的方法:GetOne()。
2.GetOne()方法ADODB有个比较直接的方法可以比较方便地检测某条记录是否存在,那就是它的GetOne($sql)方法。
该方法返回查询记录的第1条第1个字段名的值,如果执行过程中出现错误,则返回布尔值false。
我们可以检测这个值是否存在:
代码如下 | |
<?php Include_once("libs/adodb/adodb.inc.php"); // 创建一个mysql连接实例对象 $db = NewADOConnection("mysql"); // 打开一个数据库连接 $db->Connect("localhost", “root”, “passwd”, “adodb”) or die("Unable to connect!"); $rs = $db->GetOne("SELECT * FROM library WHERE id='$id'"); if($rs){ echo '记录存在'; }else { echo '记录不存在'; } ?> |
不过这样有一个问题是,如果数据表中id=$id的记录有多条,不仅仅要知道是否存在有这样一条记录,还要把这条记录提取出来,则可以使用ADODB的GetRow()方法。
3.GetRow()方法
代码如下 | |
<?php Include_once("libs/adodb/adodb.inc.php"); // 创建一个mysql连接实例对象 $db = NewADOConnection("mysql"); // 打开一个数据库连接 $db->Connect("localhost", “root”, “passwd”, “adodb”) or die("Unable to connect!"); $rs = $db->GetRow("SELECT * FROM library WHERE id='$id'"); if(is_array($rs)){ echo '记录存在'; print_r($rs); } else { echo '记录不存在'; } ?> |
需要注意的是,GetOne($sql) 和 GetRow($sql) 都能得到一条特定的记录,或者得到该记录不存在的信息,但是如果符合查询条件的记录存在多条时,则这两个方法只传回第一条记录,其他的都自动抛弃。
如果只要得到查询结果的行数,则可以使用结果集方法中的RecordCount()方法。
4.取得返回的记录行数ADODB还提供了一批实用功能,如在进行查询时,提供了非常有用的RecordCount() 和FieldCount()方法,分别返回记录的数量和字段的数量,以下是应用这两个方法的例子。
代码如下 | |
<?php include("libs/adodb/adodb.inc.php"); // 创建一个mysql连接实例对象 $db = NewADOConnection("mysql"); // 打开一个数据库连接 $db->Connect("localhost", “root”, “passwd”, “adodb”) or die("Unable to connect!"); // 构造并执行一个查询 $query = "SELECT * FROM library"; $result = $db->Execute($query) or die("Error in query: $query. " . $db->ErrorMsg()); // 取得和显示返回的记录行数 echo $result->RecordCount() . " 行记录被返回n"; // 取得和显示返回的字段个数 echo $result->FieldCount() . " 个字段被返回n"; // clea up $db->Close(); ?> |
我们可以使用FetchField()方法取得字段的信息,其中含有该字段的详细资料,包括名称和类型等,请看如下的脚本例子。
代码如下 | |
<?php include("libs/adodb/adodb.inc.php"); // 创建一个mysql连接实例对象 $db = NewADOConnection("mysql"); // 打开一个数据库连接 $db->Connect("localhost", "root", "passwd", "adodb") or die("Unable to connect!"); // 构造并执行一个查询 $query = "SELECT * FROM library"; $result = $db->Execute($query) or die("Error in query: $query. " . $db->ErrorMsg()); // 取得记录集中字段的结构信息 for($x=0; $x<$result->FieldCount(); $x++){ print_r($result->FetchField($x)); } // 清理无用的对象 $db->Close(); ?> |
下面输出的是有关id字段的结构信息。
stdClass myMagicbject
(
[name] => id
[table] => library
[def] =>
[max_length] => 3
[not_null] => 1
[primary_key] => 1
[multiple_key] => 0
[unique_key] => 0
[numeric] => 1
[blob] => 0
[type] => int
[unsigned] => 1
[zerofill] => 0
[binary] =>
)
5.其他相关方法当执行一个INSERT查询时,如果该表的主键是一个自动增量的字段,则可以使用ADODB的insert_id()方法,来获得最后数据插入时自动产生的增量值。
代码如下 | |
<?php include_once(“libs/adodb/adodb.inc.php”); // 创建一个mysql连接实例对象 $db = NewADOConnection("mysql"); // 打开一个数据库连接 $db->Connect("localhost", “root”, “root”, “adodb”) or die("Unable to connect!"); // 构造并执行INSERT插入操作 $title = $db->qstr("PHP5与MySQL5 Web开发技术详解"); $author = $db->qstr("杜江"); $query = "INSERT INTO library (title, author) VALUES ($title, $author)"; $result = $db->Execute($query) or die("Error in query: $query. " . $db->ErrorMsg()); // 显示插入的记录号 if ($result){ echo "最后插入的记录ID: " . $db->Insert_ID(); } // 清理无用的对象 $db->Close(); ?> |
脚本中的qstr()方法,功能是过滤SQL查询中的非法字符。