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函数.