Forum und email

sqlite_create_function

(PHP 5, PECL pdo_sqlite:0.2-0.3 sqlite:1.0-1.0.3)

sqlite_create_function — הפוקציה משלבת פונקציות של המשתמש לשימוש בשאילתות SQL .

תיאור

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

sqlite_create_function() מאפשרת לך לרשום פונקציות PHP בשילוב עם SQLite , בדומה ל UDF (User Defined Function), כך שניתן יהיה להשתמש בהם מתוך שאילתות SQL.

db מציין את הבסיס הנתונים שכלפיו תתבצע ההרחבה, function_name מציין את שם הפונקציה שברצונך להוסיף , callback השם של פונקצית ה PHP . הפרמטר האופציונאלי num_args מרמז ל מפענח של ה- SQLite, על מספר הפרמטרים שהפונציה תקבל, מומלץ לא להתשמש בפרמטר זה, אלא כן הפונקציה שלך מקבלת מספר מוגדר ומוחלט של פרמטרים.

ניתן להתשמש בפונקציה בכל חלק של שאילתת SQL , שיכולה לקרוא לפונקציות, למשל: SELECT או UPDATE , או בשימוש בטריגרים.

Example#1 sqlite_create_function() example

<?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 מבצעת את הפונקציה, שם הקובץ שיתקבל בתוך $rows יתקבל בצורה מעובדת.

ע"י שימוש בטכניקה הזאת חסכנו את הצורך להשתמש בלולאה כדוגמת - foreach() , וקיבלנו את הפלט מעובד ישר מבסיס הנתונים.

על מנת להתשמש בפונקציות PHP אין צורך להשתמש בפונקציה sqlite_create_function(), בעת פתיחת בסיס הנתונים נוצרת פונקציית php , שבעזרתה אפשר לקרוא לכל פונקציות PHP.

Example#2 Example of using the PHP function

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

הדוגמא הזאת תקרא לפונקציה md5() , עבור כל filename, והתוצאות יוכנסו ל $rows .

Note: PHP לא תשתמש בצורה אוטומטית בפונקציות UDF של המשתמש, במקרה של נתונים בינאריים, בגלל שיקול של ביצועים. כדאי להשתמש בפונקציות אלה נדרשת התערבות של המתכנת. לפרטים נוספים הסתכל בפונקציות sqlite_udf_encode_binary() וsqlite_udf_decode_binary() .

Tip

בכל אופן לא ממולץ להשתמש בפונקציות UDF לעיבוד נתונים בינאריים, אלא אם כן אין חשיבות למהירות עבודת האפליקציה

Tip

אתה יכול להשתמש בפונקציות sqlite_create_function() ו sqlite_create_aggregate()לרמוס פונקציות SQL ב SQLite .

ראה גם sqlite_create_aggregate().