Ok, I got it!!
In my php functions I use this code to connect to the DB (its in an include
file)
$dbh=$GLOBALS['dbh']; // Get Global Handle
if ($dbh==null) // First time? no Handle?
{
$dbh = new PDO('sqlite:/var/www/domocenter.sqlite'); // Create new
handle
$GLOBALS['dbh']; // Save it in globals
include_once("/var/www/arduino/sqlite_functions.php"); // Include al
the functions needed
}
return($dbh); // Devover el handle a manejar.
2009/9/1 Kees Nuyt <[email protected]>
> On Tue, 1 Sep 2009 09:51:39 +0200, Alejandro Ruiz-Oriol
> <[email protected]> wrote:
>
> >Yes, but how do I know in the PHP fired by the trigger what's the PHP
> >context of his "parent"?.
> >
> >Let me explain it.
> >
> >Inside the trigger I excute something like
> >
> >select test();
> >
> >where test is a registered php function.
> >
> >When the trigger fires, the php function gets called, but the first thing
> I
> >need to have is a database handler. Right know, the first thing I do in
> >that test php is:
> >
> >$dbh = new PDO('sqlite:mydb.sqlite');
> >
> >so that creates a new (an different) context, then if I try to:
> >
> >$res=$dbh->query("update set field=1 from same_table_that fired_the
> >trigger");
> >
> >I run in a deadlock, the first trigger is locking the table, and I'm
> waiting
> >for that trigger to relese the lock. This will only end by time-out with
> the
> >error "Database locked".
> >
> >so, how can the php fired by a trigger knows whats the php sqlite context
> of
> >its caller??
>
> You have a php script. It opens a database handle and
> registers a function. Then it executes some SQL code which
> fires a trigger, which in his turn calls your registered
> function.
> All these nested calls execute in the same context, not
> asynchronically. So the database handle you opened in the
> top level is still valid when your registered function is
> called. In other words, you don't have to open a second
> handle.
>
> Opening a second handle and starting a transaction causes
> the lock.
>
> How the function gets the handle is another matter.
> If $dbh is a global variable you could simply use that.
>
> All in all, it is quite complicated, probably too
> complicated. Are you sure your registered function really
> needs to use the database handle?
> Can't you just use SQL in the trigger, and restrict the
> function to what functions are useful for, like calculations
> which can't be donein SQL or aggregation tasks?
> --
> ( Kees Nuyt
> )
> c[_]
> _______________________________________________
> sqlite-users mailing list
> [email protected]
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users