DB_common::autoPrepare()
Synopsis
resource autoPrepare (
string $table
,
array $table_fields
,
integer $mode
= DB_AUTOQUERY_INSERT
,
string $where
= false
)
Description
Automatically builds an INSERT or UPDATE SQL statement so it can later be used by execute() or executeMultiple().
Parameter
-
string
$table -
name of the table
-
array
$table_fields -
ordered array containing the fields names
Be aware that these fields are assigned
?placeholders, therefore the data you pass to them in the execute() will be automatically escaped and quoted according to the current DBMS's requirements.
-
integer
$mode -
type of query to make (DB_AUTOQUERY_INSERT or DB_AUTOQUERY_UPDATE)
-
string
$where -
a string to be used in the WHERE clause. This is only used when
$modeis DB_AUTOQUERY_UPDATE. The string is put directly into the query, so you must escape and quote literals according to the DBMS's standards.
Return value
resource - resource handle for the query or a DB_Error object on failure
Throws
| Error code | Error message | Reason | Solution |
|---|---|---|---|
| DB_ERROR_NEED_MORE_DATA | insufficient data supplied | The ordered array, which has to contain fields names, is empty. | Check and correct your fields names array. |
| DB_ERROR_SYNTAX | syntax error | You use an unknown mode. | Available modes are only DB_AUTOQUERY_INSERT for INSERT queries or DB_AUTOQUERY_UPDATE for UPDATE queries. |
| DB_ERROR_NODBSELECTED | no database selected | No database was chosen. | Check the DSN in connect(). |
| every other error code | Database specific error | Check the database related section of PHP-Manual to detect the reason for this error. |
Note
This function can not be called statically.
Example
Using autoPrepare() in insert mode
<?php
// Once you have a valid DB object named $db...
$table_name = 'user';
$table_fields = array('name', 'country');
$table_values = array('Zoe', 'France');
$sth = $db->autoPrepare($table_name, $table_fields,
DB_AUTOQUERY_INSERT);
if (PEAR::isError($sth)) {
die($sth->getMessage());
}
$res =& $db->execute($sth, $table_values);
if (PEAR::isError($res)) {
die($res->getMessage());
}
?>
Using autoPrepare() in update mode
<?php
// Once you have a valid DB object named $db...
$table_name = 'user';
$table_fields = array('name', 'country');
$table_values = array('Bob', 'USA');
$sth = $db->autoPrepare($table_name, $table_fields,
DB_AUTOQUERY_UPDATE, "country = 'Japan'");
if (PEAR::isError($sth)) {
die($sth->getMessage());
}
$res =& $db->execute($sth, $table_values);
if (PEAR::isError($res)) {
die($res->getMessage());
}
?>