Delicious Bookmark this on Delicious Share on Facebook SlashdotSlashdot It! Digg! Digg



PHP : Function Reference : SQLite Functions : sqlite_create_function

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)
void sqlite_create_function ( resource dbhandle, string function_name, callback callback [, int num_args] )

Example 2324. 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;
}
?>

Example 2325. Example of using the PHP function

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

This example will call the md5() on each filename column in the database and return the result into $rows


Code Examples / Notes » sqlite_create_php

info

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 Language


Follow Navioo On Twitter
sqlite_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
eXTReMe Tracker