sqlite_create_function
PHP 5
註冊一個用戶自定義的SQL語句
描述:
voidsqlite_create_function(resource$dbhandle, string$function_name, callback$callback [, int$num_args])
面向對象風格的方法:
class SQLiteDatabase
{
voidcreateFunction(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函式.