Ok thanks, I will try that. But wouldn't that be a pretty heavy weight solution 
to this problem, since an entire dynamic object needs to be created and garbage 
collected just to pass a string literal in? Surely there must be a more 
efficient solution :(

Regards,

Kendall Bennett, CEO
A Main Hobbies
424 Otterson Drive, Suite 160
Chico, CA 95928
1-800-705-2215 (Toll-Free)
1-530-894-0797 (Int'l & Local)
1-530-894-9049 (Fax)
http://www.amainhobbies.com


________________________________
From: Håkan Medin <[email protected]>
Date: Mon, 15 Jun 2009 23:32:20 -0700
To: Kendall Bennett <[email protected]>
Cc: Zend Framework General <[email protected]>
Subject: Re: [fw-general] Zend_Db and the now() keyword?

Hi,

Try using  Zend_Db_Expr:

$data = array(
  'orders_status' => (int)$orders_status,
  'last_modified' => new Zend_Db_Expr('NOW()'));

Regards
    Håkan Medin



On Tue, Jun 16, 2009 at 2:46 AM, Kendall Bennett <[email protected]> 
wrote:
Ok, I am struggling to find a solution to this problem using the Zend_Db 
interface. I want to do the following:

$data = array(
  'orders_status' => (int)$orders_status,
  'last_modified' => 'now()');
$db->update(TABLE_ORDERS, $data, 'orders_id = ' . (int)$orders_id)

But the update() method does not understand the now() string and sends it in 
the SQL as a string literal, because it gets quoted. Instead I have to do this:

$now = date('Y-m-d H:i:s');
$data = array(
  'orders_status' => (int)$orders_status,
  'last_modified' => $now);
$db->update(TABLE_ORDERS, $data, 'orders_id = ' . (int)$orders_id)

This works of course, but the problem is I really need to set the value to the 
current date time that the query is executed, so it gets the date time stamp on 
the DB server, not on the PHP application server. Even though the values are 
going to be close, if the database is on a separate server the timestamps can 
be slightly different. Worse, if this code was running on a server farm for the 
PHP servers, each server could have slightly different timestamps, and if you 
are relying on the timestamps to be sequential, you can run into problems.

Now clearly I can hand code the SQL inserts, but that defeats the purpose of 
having the insert() function. In our existing code the insert() wrapper special 
cases the now() string, and passes it through literally.

Is there any way to do that with Zend_Db?

Regards,

Kendall Bennett, CEO
A Main Hobbies
424 Otterson Drive, Suite 160
Chico, CA 95928
1-800-705-2215 (Toll-Free)
1-530-894-0797 (Int'l & Local)
1-530-894-9049 (Fax)
http://www.amainhobbies.com <http://www.amainhobbies.com/>



Reply via email to