RE: [PEAR-CVS] cvs: pear /DB/DB common.php
| From: | Lukas Smith | Date: | Wed, 12 Jun 2002 13:07:23 +0000 |
| Subject: | RE: [PEAR-CVS] cvs: pear /DB/DB common.php | ||
| References: | 1 | Groups: | php.pear.cvs |
| Request: | Send a blank email to pear-cvs+get-4569@lists.php.net to get a copy of this message | ||
Why not do something like this in buildManipSQL():
case DB_AUTOQUERY_UPDATE:
$set = '';
while (list(, $value) = each($table_fields)) {
if ($first) {
$first = false;
} else {
$set .= ',';
}
$set .= "$value = ?";
}
$sql = "UPDATE $table SET $set";
if($where) {
$sql .= " WHERE $where";
}
return $sql;
break;
Lukas Smith
smith@dybnet.de
_______________________________
DybNet Internet Solutions GbR
Reuchlinstr. 10-11
Gebäude 4 1.OG Raum 6 (4.1.6)
10553 Berlin
Germany
Tel. : +49 30 83 22 50 00
Fax : +49 30 83 22 50 07
www.dybnet.de info@dybnet.de
> -----Original Message-----
> From: Fabien MARTY [mailto:fabien.marty@free.fr]
> Sent: Tuesday, June 11, 2002 5:57 PM
> To: pear-cvs@lists.php.net
> Subject: [PEAR-CVS] cvs: pear /DB/DB common.php
>
> fab Tue Jun 11 11:57:28 2002 EDT
>
> Modified files:
> /pear/DB/DB common.php
> Log:
> changes in autoPrepare() and add of autoExecute(), buildManipSQL()
>
>
>
> Index: pear/DB/DB/common.php
> diff -u pear/DB/DB/common.php:1.6 pear/DB/DB/common.php:1.7
> --- pear/DB/DB/common.php:1.6 Sun Jun 9 11:01:16 2002
> +++ pear/DB/DB/common.php Tue Jun 11 11:57:27 2002
> @@ -16,7 +16,7 @@
> // | Author: Stig Bakken <ssb@fast.no>
> |
> //
+---------------------------------------------------------------------
> -+
> //
> -// $Id: common.php,v 1.6 2002/06/09 15:01:16 fab Exp $
> +// $Id: common.php,v 1.7 2002/06/11 15:57:27 fab Exp $
> //
> // Base class for DB implementations.
> //
> @@ -434,18 +434,62 @@
> /**
> * Make automaticaly an insert or update query and call prepare()
with
> it
> *
> + * @param string $table name of the table
> + * @param array $table_fields ordered array containing the fields
> names
> + * @param int $mode type of query to make (DB_AUTOQUERY_INSERT or
> DB_AUTOQUERY_UPDATE)
> + * @param string $where in case of update queries, this string
will be
> put after the sql WHERE statement
> + * @return resource handle for the query
> + * @see buildManipSQL
> + * @access public
> + */
> + function autoPrepare($table, $table_fields, $mode =
> DB_AUTOQUERY_INSERT, $where = false)
> + {
> + $query = $this->buildManipSQL($table, $table_fields, $mode,
> $where);
> + return $this->prepare($query);
> + }
> +
> + // {{{
> + // }}} autoExecute()
> +
> + /**
> + * Make automaticaly an insert or update query and call prepare()
and
> execute() with it
> + *
> + * @param string $table name of the table
> + * @param array $fields_values assoc ($key=>$value) where $key is
a
> field name and $value its value
> + * @param int $mode type of query to make (DB_AUTOQUERY_INSERT or
> DB_AUTOQUERY_UPDATE)
> + * @param string $where in case of update queries, this string
will be
> put after the sql WHERE statement
> + * @return mixed a new DB_Result or a DB_Error when fail
> + * @see buildManipSQL
> + * @see autoPrepare
> + * @access public
> + */
> + function autoExecute($table, $fields_values, $mode =
> DB_AUTOQUERY_INSERT, $where = false)
> + {
> + $sth = $this->autoPrepare($table, array_keys($fields_values),
> $mode, $where);
> + return $this->execute($sth, array_values($fields_values));
> +
> + }
> +
> + // {{{
> + // }}} buildManipSQL()
> +
> + /**
> + * Make automaticaly an sql query for prepare()
> + *
> + * Example : buildManipSQL('table_sql', array('field1',
> 'field2',
> 'field3'), DB_AUTOQUERY_INSERT)
> + * will return the string : INSERT INTO table_sql
> (field1,field2,field3) VALUES (?,?,?)
> * NB : This belongs more to a SQL Builder class, but this is a
simple
> facility
> *
> * @param string $table name of the table
> - * @param array $array assoc ($key=>$value), $key are fields
names,
> $value are not used
> - * @param int $mode type of queries to make (DB_AUTOQUERY_INSERT
or
> DB_AUTOQUERY_UPDATE)
> + * @param array $table_fields ordered array containing the fields
> names
> + * @param int $mode type of query to make (DB_AUTOQUERY_INSERT or
> DB_AUTOQUERY_UPDATE)
> * @param string $where in case of update queries, this string
will be
> put after the sql WHERE statement
> - * @return resource handle for the query
> + * @return string sql query for prepare()
> * @access public
> */
> - function autoPrepare($table, $array, $mode = DB_AUTOQUERY_INSERT,
> $where = NULL)
> + function buildManipSQL($table, $table_fields, $mode, $where =
false)
> {
> - if (count($array)==0) {
> + if (count($table_fields)==0) {
> $this->raiseError(DB_ERROR_NEED_MORE_DATA);
> }
> $first = true;
> @@ -453,29 +497,32 @@
> case DB_AUTOQUERY_INSERT:
> $values = '';
> $names = '';
> - while (list($key, $value) = each($array)) {
> + while (list(, $value) = each($table_fields)) {
> if ($first) {
> $first = false;
> } else {
> $names .= ',';
> $values .= ',';
> }
> - $names .= $key;
> + $names .= $value;
> $values .= '?';
> }
> - return $this->prepare("INSERT INTO $table ($names) VALUES
> ($values)");
> + return "INSERT INTO $table ($names) VALUES ($values)";
> break;
> case DB_AUTOQUERY_UPDATE:
> + if (!$where) { // We need a WHERE statement (if you
don't,
> use a stupid one like 1=1)
> + $this->raiseError(DB_ERROR_NEED_MORE_DATA);
> + }
> $set = '';
> - while (list($key, $value) = each($array)) {
> + while (list(, $value) = each($table_fields)) {
> if ($first) {
> $first = false;
> } else {
> $set .= ',';
> }
> - $set .= "$key = ?";
> + $set .= "$value = ?";
> }
> - return $this->prepare("UPDATE $table SET $set WHERE
$where");
> + return "UPDATE $table SET $set WHERE $where";
> break;
> default:
> $this->raiseError(DB_ERROR_SYNTAX);
>
>
>
> --
> PEAR CVS Mailing List (http://pear.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php