. */ #namespace Doctrine::DBAL::Connections; /** * Doctrine_Connection_Mysql * * @license http://www.opensource.org/licenses/lgpl-license.php LGPL * @author Konsta Vesterinen * @author Lukas Smith (PEAR MDB2 library) * @version $Revision$ * @link www.phpdoctrine.org * @since 1.0 * @deprecated */ class Doctrine_Connection_Mysql extends Doctrine_Connection_Common { /** * Driver name. * * @var string */ protected $_driverName = 'Mysql'; /** * the constructor * * @param Doctrine_Manager $manager * @param PDO|Doctrine_Adapter $adapter database handler */ public function __construct(array $params) { parent::__construct($params); } /** * Set the charset on the current connection * * @param string charset */ public function setCharset($charset) { $this->exec('SET NAMES ' . $this->quote($charset)); } /** * Execute a SQL REPLACE query. A REPLACE query is identical to a INSERT * query, except that if there is already a row in the table with the same * key field values, the REPLACE query just updates its values instead of * inserting a new row. * * The REPLACE type of query does not make part of the SQL standards. Since * practically only MySQL implements it natively, this type of query is * emulated through this method for other DBMS using standard types of * queries inside a transaction to assure the atomicity of the operation. * * @access public * * @param string $table name of the table on which the REPLACE query will * be executed. * @param array $fields associative array that describes the fields and the * values that will be inserted or updated in the specified table. The * indexes of the array are the names of all the fields of the table. The * values of the array are also associative arrays that describe the * values and other properties of the table fields. * * Here follows a list of field properties that need to be specified: * * value: * Value to be assigned to the specified field. This value may be * of specified in database independent type format as this * function can perform the necessary datatype conversions. * * Default: * this property is required unless the Null property * is set to 1. * * type * Name of the type of the field. Currently, all types Metabase * are supported except for clob and blob. * * Default: no type conversion * * null * Boolean property that indicates that the value for this field * should be set to null. * * The default value for fields missing in INSERT queries may be * specified the definition of a table. Often, the default value * is already null, but since the REPLACE may be emulated using * an UPDATE query, make sure that all fields of the table are * listed in this function argument array. * * Default: 0 * * key * Boolean property that indicates that this field should be * handled as a primary key or at least as part of the compound * unique index of the table that will determine the row that will * updated if it exists or inserted a new row otherwise. * * This function will fail if no key field is specified or if the * value of a key field is set to null because fields that are * part of unique index they may not be null. * * Default: 0 * * @return integer the number of affected rows */ public function replace($tableName, array $data, array $keys) { $count = count($data); $query = $values = ''; $keys = $colnum = 0; for (reset($data); $colnum < $count; next($data), $colnum++) { $name = key($data); if ($colnum > 0) { $query .= ','; $values.= ','; } $query .= $name; if (isset($data[$name]['null']) && $data[$name]['null']) { $value = 'NULL'; } else { $type = isset($data[$name]['type']) ? $data[$name]['type'] : null; $value = $this->quote($data[$name]['value'], $type); } $values .= $value; if (isset($data[$name]['key']) && $data[$name]['key']) { if ($value === 'NULL') { throw new Doctrine_Connection_Mysql_Exception('key value '.$name.' may not be NULL.'); } $keys++; } } if ($keys == 0) { throw new Doctrine_Connection_Mysql_Exception('Not specified which fields are keys.'); } $query = 'REPLACE INTO ' . $tableName . ' (' . $query . ') VALUES (' . $values . ')'; return $this->exec($query); } /** * Constructs the MySql PDO DSN. * * Overrides Connection#_constructPdoDsn(). * * @return string The DSN. */ protected function _constructPdoDsn() { $dsn = 'mysql:'; if (isset($this->_params['host'])) { $dsn .= 'host=' . $this->_params['host'] . ';'; } if (isset($this->_params['port'])) { $dsn .= 'port=' . $this->_params['port'] . ';'; } if (isset($this->_params['dbname'])) { $dsn .= 'dbname=' . $this->_params['dbname'] . ';'; } if (isset($this->_params['unix_socket'])) { $dsn .= 'unix_socket=' . $this->_params['unix_socket'] . ';'; } return $dsn; } }