[Zope-dev] PHP vs Zope cost benefit

Jason Spisak jspisak@lycoris.com
Tue, 23 Apr 2002 11:07:54 -0700


Excellent thinking.  I'm guessing that the PyscopyDA handles 
that type of thing and makes sure that it doesn't get nasty.  
That's a big win for Zope when dealing with inventory and 
things like that.  Thanks Oliver.

On Tuesday 23 April 2002 10:33 am, you wrote:
> Jason Spisak wrote:
> > You might remember me, I've been a big Zope fan since
> > ZTables, and have recently been asked "Why Zope?".  The
> > project is commited to PostgreSQL and leaning toward PHP. 
> > Here's the project requirements for a softwre company:
> >
> > Hardware Compatability List
> > Software Compatability List
> > Store/ECommerce
> > User tracking and services like
> >   Pay for downloads
> >   Upgrades if they have a serial number paid up
> > Billing/Invoicing for corporate accounts
> > Inventory tracking
> > CRM/Sales functions
> >
> >
> > They don't see that Zope's built in security machinery
> > would beat something home brewed for what they expect to
> > need it for. Plus the over head of running Zope instances
> > is greater than PHP scripts.
> >
> > What are the arguments for Zope in this context?
>
> Transaction Safety?
>
> When reading your requirements that was the first thing
> coming into my mind. I don't know how php does this, so I
> went to google and found
> http://www.phpbuilder.com/columns/linuxjournal200009.php3
>
> Below is one snippet, notice all the ugly "//check for
> errors" and "//abort transaction". If someone knows where I
> misinterpret something or how php solves this, corrections
> welcome.
>
> But wouldn't it be nice if we had an application server which
> would take care of all this for us?
>
> Oh, wait ... ;-)
>
> cheers,
> oliver
>
>
>
>
> function cart_new() {
>      //make the database connection handle available
>      global $conn,$customer_id,$feedback;
>
>      //start a transaction
>      query("BEGIN WORK");
>
>      //query postgres for the next value in our sequence
>      $res=query("SELECT nextval('seq_customer_id')");
>
>      //check for errors
>      if (!$res || pg_numrows($res)<1) {
>          $feedback .= pg_errormessage($conn);
>          $feedback .= ' Error - Database didn\'t return next
> value '; query("ROLLBACK");
>          return false;
>      } else {
>          //set that value in a local var
>          $customer_id=pg_result($res,0,0);
>
>          //register the id with PHP4
>          session_register('customer_id');
>
>          //insert the new customer row
>          $res=query("INSERT INTO customers (customer_id)
> VALUES ('$customer_id')");
>
>          //check for errors
>          if (!$res || pg_cmdtuples($res)<1) {
>              $feedback .= pg_errormessage($conn);
>              $feedback .= ' Error - couldn\'t insert new
> customer row '; query("ROLLBACK");
>              return false;
>          } else {
>              //commit this transaction
>              query("COMMIT");
>              return true;
>          }
>      }
> }

-- 
Jason Spisak
Marketing Director, Lycoris
jspisak@lycoris.com, 
http://www.lycoris.com
Desktop/LX: Familiar. Powerful. Open.
+1 425 869-2930 voice, +1 425 671-0504 fax