示例#1
0
文件: Row.php 项目: nrocy/phactory
 public function save()
 {
     $pdo = Phactory::getConnection();
     $sql = "INSERT INTO {$this->_table} (";
     $data = array();
     $params = array();
     foreach ($this->_storage as $key => $value) {
         $data["`{$key}`"] = ":{$key}";
         $params[":{$key}"] = $value;
     }
     $keys = array_keys($data);
     $values = array_values($data);
     $sql .= join(',', $keys);
     $sql .= ") VALUES (";
     $sql .= join(',', $values);
     $sql .= ")";
     $stmt = $pdo->prepare($sql);
     $r = $stmt->execute($params);
     if ($r === false) {
         $error = $stmt->errorInfo();
         Phactory_Logger::error('SQL statement failed: ' . $sql . ' ERROR MESSAGE: ' . $error[2] . ' ERROR CODE: ' . $error[1]);
     }
     // only works if table's primary key autoincrements
     $id = $pdo->lastInsertId();
     if ($pk = $this->_table->getPrimaryKey()) {
         if ($id) {
             $this->_storage[$pk] = $id;
         } else {
             // if key doesn't autoincrement, find last inserted row and set the primary key.
             $sql = "SELECT * FROM {$this->_table} WHERE";
             for ($i = 0, $size = sizeof($keys); $i < $size; ++$i) {
                 $sql .= " {$keys[$i]} = {$values[$i]} AND";
             }
             $sql = substr($sql, 0, -4);
             $stmt = $pdo->prepare($sql);
             $stmt->execute($params);
             $result = $stmt->fetch(PDO::FETCH_ASSOC);
             $this->_storage[$pk] = $result[$pk];
         }
     }
     return $r;
 }
示例#2
0
 public static function getAll($table_name, $byColumns)
 {
     if (!is_array($byColumns)) {
         throw new Exception("\$byColumns must be an associative array of 'column => value' pairs");
     }
     $table = new Phactory_Table($table_name);
     $equals = array();
     $params = array();
     foreach ($byColumns as $field => $value) {
         $equals[] = '`' . $field . '` = ?';
         $params[] = $value;
     }
     $where_sql = implode(' AND ', $equals);
     $sql = "SELECT * FROM `" . $table->getName() . "` WHERE " . $where_sql;
     $stmt = self::$_pdo->prepare($sql);
     $r = $stmt->execute($params);
     if ($r === false) {
         $error = $stmt->errorInfo();
         Phactory_Logger::error('SQL statement failed: ' . $sql . ' ERROR MESSAGE: ' . $error[2] . ' ERROR CODE: ' . $error[1]);
     }
     $rows = array();
     while ($result = $stmt->fetch(PDO::FETCH_ASSOC)) {
         $rows[] = new Phactory_Row($table_name, $result);
     }
     return $rows;
 }
示例#3
0
 protected function _associateManyToMany($row, $many_to_many)
 {
     $pdo = Phactory::getConnection();
     foreach ($many_to_many as $name => $arr) {
         list($to_rows, $assoc) = $arr;
         foreach ($to_rows as $to_row) {
             $join_table = $assoc->getJoinTable();
             $from_join_column = $assoc->getFromJoinColumn();
             $to_join_column = $assoc->getToJoinColumn();
             $sql = "INSERT INTO `{$join_table}` \n                        (`{$from_join_column}`, `{$to_join_column}`)\n                        VALUES\n                        (:from_id, :to_id)";
             $stmt = $pdo->prepare($sql);
             $r = $stmt->execute(array(':from_id' => $row->getId(), ':to_id' => $to_row->getId()));
             if ($r === false) {
                 $error = $stmt->errorInfo();
                 Phactory_Logger::error('SQL statement failed: ' . $sql . ' ERROR MESSAGE: ' . $error[2] . ' ERROR CODE: ' . $error[1]);
             }
         }
     }
 }
示例#4
0
文件: Logger.php 项目: nrocy/phactory
 public static function setLogLevel($level)
 {
     self::$_level = $level;
 }