|
sqlite_create_function
Registers a "regular" User Defined Function for use in SQL statements
(PHP 5, PECL pdo_sqlite:0.2-0.3 sqlite:1.0-1.0.3)
Object oriented style (method): SQLiteDatabase { sqlite_create_function() allows you to register a PHP function with SQLite as an UDF (User Defined Function), so that it can be called from within your SQL statements. The UDF can be used in any SQL statement that can call functions, such as SELECT and UPDATE statements and also in triggers. Parameters
Note:
Two alternative syntaxes are supported for compatibility with other database extensions (such as MySQL). The preferred form is the first, where the dbhandle parameter is the first parameter to the function. ExamplesExample 2324. sqlite_create_function() example<?php In this example, we have a function that calculates the md5 sum of a string, and then reverses it. When the SQL statement executes, it returns the value of the filename transformed by our function. The data returned in $rows contains the processed result. The beauty of this technique is that you do not need to process the result using a foreach() loop after you have queried for the data.
PHP registers a special function named Example 2325. Example of using the PHP function<?php
This example will call the md5() on each
Note:
For performance reasons, PHP will not automatically encode/decode binary data passed to and from your UDF's. You need to manually encode/decode the parameters and return values if you need to process binary data in this way. Take a look at sqlite_udf_encode_binary() and sqlite_udf_decode_binary() for more details.
Tip:
It is not recommended to use UDF's to handle processing of binary data, unless high performance is not a key requirement of your application.
Tip:
You can use sqlite_create_function() and sqlite_create_aggregate() to override SQLite native SQL functions.
See Also
Code Examples / Notes » sqlite_create_phpinfo
The function can be a method of a class: <?php class sqlite_function { function md5($value) { return md5($value); } } $dbhandle = sqlite_open('SQLiteDB'); sqlite_create_function($dbhandle, 'md5', array('sqlite_function', 'md5'), 1); // From now on, you can use md5 function inside your SQL statements ?> It works fine :) brett
It appears that UDFs created by sqlite_create_function() do not work properly within INSERT or DELETE statements. A simplified INSERT example: <?php // SQLite UDF // Mimic MySQL FROM_UNIXTIME function function from_unixtime($unixtime) { return "'".date('Y-m-d H:i:s', $unixtime)."'"; } // ----------------------------------------------------------- // Open the database and create the UDF $handle = sqlite_open('db.sqlite', 0666); sqlite_create_function($handle, 'FROM_UNIXTIME', 'from_unixtime', 1); // Insert a row $sql = " INSERT INTO table (name, timestamp) VALUES ('Foo', FROM_UNIXTIME(".time()."); "; $result = sqlite_exec($handle, $sql); // Retrieve the row $sql = "SELECT * FROM table"; $result = sqlite_unbuffered_query($handle, $sql) $row = sqlite_fetch_all($result, SQLITE_ASSOC); // Dump print_r($row); ?> This will show: Array ( [0] => Array ( [name] => 'Foo' [timestamp] => -1 ) ) The expected result for timestamp would be something like '2005-05-20 10:00:00' |
Change Languagesqlite_array_query sqlite_busy_timeout sqlite_changes sqlite_close sqlite_column sqlite_create_aggregate sqlite_create_function sqlite_current sqlite_error_string sqlite_escape_string sqlite_exec sqlite_factory sqlite_fetch_all sqlite_fetch_array sqlite_fetch_column_types sqlite_fetch_object sqlite_fetch_single sqlite_fetch_string sqlite_field_name sqlite_has_more sqlite_has_prev sqlite_key sqlite_last_error sqlite_last_insert_rowid sqlite_libencoding sqlite_libversion sqlite_next sqlite_num_fields sqlite_num_rows sqlite_open sqlite_popen sqlite_prev sqlite_query sqlite_rewind sqlite_seek sqlite_single_query sqlite_udf_decode_binary sqlite_udf_encode_binary sqlite_unbuffered_query sqlite_valid |