Sqlite3專題

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

相關詞條

相關搜尋

熱門詞條

聯絡我們