POP Article V2.0 设为主页
收藏本站
首 页交流论坛留 言
您现在的位置:首 页 >> 数据库编程 >> 编程技术 >> 查看文章
PHP5中的 sqlite_create_function
作者:tamsyn  来源:www.sqlite.com.cn  时间:2007-9-6  【 字体: 】 〖 双击滚屏 〗

PHP 5

注册一个用户自定义的SQL语句 

描述: 

void sqlite_create_function(resource $dbhandle, string $function_name, callback $callback [, int $num_args]) 

面向对象风格的方法:

class SQLiteDatabase 

{

void createFunction(string $function_name, callback $callback [, int $num_args]) 

}

sqlite_create_function() 允许你用PHP的函数来编写扩充SQLiteUDF (用户自定义函数), 然后你就可以在SQL语句中调用该函数了.

UDF可以被用在任何能够调用SQL函数的语句中,如SELECT UPDATE 还有触发器.

参数 

dbhandle 

 sqlite_open() 函数执行后返回的SQLite 数据库文件的句柄. 如果是使用面向对象的方法(类调用)则不需要该参数.

function_name 

要创建的SQL函数名.

callback 

用来实现自定义SQL函数的回调函数.

回调函数返回的数据类型应该可以被SQLite正确的识别.

num_args 

如果回调函数的参数个数是固定的,则用该参数来告诉SQLite的语法分析器参数的个数.

为了能够兼容其它数据库的扩展函数(例如 MySQL),最好使用两种函数接口中第一个参数是的dbhandle那种形式.

代码演示 

sqlite_create_function() 例子 

<?php
function md5_and_reverse($string)


{
   return
strrev(md5($string));
}

if (
$dbhandle = sqlite_open('mysqlitedb', 0666, $sqliteerror))

{
   
sqlite_create_function($dbhandle, 'md5rev', 'md5_and_reverse', 1);
   
   
$sql  = 'SELECT md5rev(filename) FROM files';
   
$rows = sqlite_array_query($dbhandle, $sql);
}

else

{ 

   echo 'Error opening sqlite db: ' . $sqliteerror;
exit;

}
?> 

 

在这个例子中, 我们用一个函数来计算字符串的md5, 然后把值做翻转. SQL语句执行的时候得到的结果是经过函数转换后的filename的值. $rows保存了程序执行的结果.

此外更方便的地方是在执行完查询之后,你不需要调用foreach()循环来获得查询的数据.

PHP 一打开数据库就注册了一个叫php的特别的自定义函数. 这个php 函数可以被任何PHP函数调用,而不需要先注册它.

直接调用 PHP 函数的例子 

<?php
$rows
= sqlite_array_query($dbhandle, "SELECT php('md5', filename) from files");
?>  

 

这个例子在数据库的每个filename列上调用md5()函数,然后把返回的结果的总和存入变量 $rows. 

考虑到效率的原因, PHP 不会自动对你的自定义函数中的二进制数据进行编码或解码. 你需要自己对你的函数的二进制参数或返回值进行编码或解码. 你可以用一下两个函数来完成这项任务 sqlite_udf_encode_binary() sqlite_udf_decode_binary() .

当然我们并不建议您在自定义函数中处理二进制数据,除非您的程序不在乎执行的效率.

你可以用sqlite_create_function() sqlite_create_aggregate()来覆盖SQLite 原有的SQL函数.

浏览次数:   【 打 印 】【 关 闭
上一篇:自做小软件初步测试Access与SQLite数据库执行效率(C#)
下一篇:SQLite在TorqueScript中的使用(翻译)
 论坛登陆
用户名:
密  码:
验证码: 
Cookie 选项:
正常登陆 隐身登陆
   
没有注册?
 文章搜索
 推荐文章
 酷站推荐
 热门文章
 网站统计
关于我们 | 网站地图 | 联系我们 | 网站历史 | 友情链接 | TOP
Copyright© 2006 Sqlite中文社区  程序开发: mistletoe  站长: 林轩 陈文成