LInux+Apache+Mysql+PHP,打造最强web技术!

PHP5中的 sqlite_create_function

上一篇 / 下一篇  2007-10-21 09:46:09 / 个人分类:PHP

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的函数来编写扩充SQLite的UDF (用户自定义函数), 然后你就可以在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函数.






TAG: PHP5 PHP

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

数据统计

  • 访问量: 18513
  • 日志数: 144
  • 图片数: 1
  • 书签数: 11
  • 建立时间: 2007-08-28
  • 更新时间: 2008-04-17

RSS订阅

Open Toolbar