扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
对查询进行缓存
上个月,我们简单地了解了ADOdb中,如何进行SELECT、INSERT和UPDATE的操作。如果你在ADOdb上是个新手,我建议先读一下那篇文章。 ADOdb 还有很多更高级的特征,这个月,我们就一起来关注其中的部分内容。
数据库时常会成为应用程序效率低下的祸首。尽量减少对数据库的查询,是提高执行效率的方法之一。这,通常可以通过对整页内容进行缓存(有很多种方法来实现。比如,PEAR->Cache),或者,如果你需要做一张动态页面,并且只想让查询指令被缓存,那么,你可以使用ADOdb,简单地将查询指令缓存起来。在你视图通过缓存来提高你的应用程序的糟糕性能之前,我建议你先试图去优化你的查询指令。有时候,一些简单的索引可以改变一切——有太多的所谓的专业的解决方案,都在使用糟糕的索引。在本文中,你能找到很多这样的实例。现在,让我们来看看ADOdb是如何使你能够对数据库的查询结果进行缓存的。在这个实例中,ADOdb把我们的最后的一次查询的结果保存在/var/tmp/adodb_cache这个缓存文件中,并保留10分钟。
include("$adodb_path/db_values.inc.php"); include("$adodb_path/adodb.inc.php"); $db = NewADOConnection('$database_type'); $db->Connect("$host", "$user", "$password", "employees"); $ADODB_CACHE_DIR = "/var/tmp/adodb_cache"; //Directory to store cached files $sql = "SELECT surname, age FROM employees"; $rs = &$db->CacheExecute(600,$sql); // Executes, and caches the results for 600 seconds if (!$rs) { print $db->ErrorMsg(); // Displays the error message if no results could be returned } else { while (!$rs->EOF) { print $rs->fields[0].' '.$rs->fields[1].'<BR>'; // fields[0] is surname, fields[1] is age $rs->MoveNext(); // Moves to the next row } // end while } // end else |
$sql = "SELECT surname, age FROM employees"; $rs = &$db->CacheExecute(600,$sql); // Executes, and caches the results for 600 seconds print $rs->RecordCount() . " rows returned]"; // Display number of rows returned |
$sql = "SELECT surname, age FROM employees"; $rs = &$db->CacheExecute(600,$sql); // Executes, and caches the results for 600 seconds print $rs->FieldCount() . " columns returned]"; // Display number of rows returned |
$sql = "SELECT surname, age FROM employees"; $rs = &$db->SelectLimit($sql, 10, 100); // Select 10 rows, starting at row 100 if (!$rs) { print $db->ErrorMsg(); // Displays the error message if no results could be returned } else { while (!$rs->EOF) { print $rs->fields[0].' '.$rs->fields[1].'<BR>'; // fields[0] is surname, fields[1] is age $rs->MoveNext(); // Moves to the next row } // end while } // end else |
$sql1 = "UPDATE employees SET balance=balance-10 WHERE id=15"; $sql2 = "UPDATE employees SET balance=balance+10 WHERE id=22"; $db->StartTrans(); $db->Execute($sql); $db->Execute($sql2); $db->CompleteTrans(); |
$sql1 = "UPDATE employees SET balance=balance-10 WHERE id=15"; $sql2 = "UPDATE employees SET balance=balance+10 WHERE id=22"; $db->StartTrans(); $db->Execute($sql); $db->Execute($sql2); $db->CompleteTrans(); if ($db->HasFailedTrans()) { // Something went wrong } |
值得注意的是,你的数据库需要支持这些事务函数。 (大多数的数据库是支持的,不过,MySQL InnoDB表支持,可 MySQL MyISAM 表不支持。)
我希望我所做的一切能让你对数据库库函数能有极大的兴趣。还有大量有趣的函数可以用来从数据库表中自动生成HTML,并且同一结果有不同的方法来实现。你可以在此找到完整的手册。
祝你好运!
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者