📄 mdb.php
字号:
* @return mixed ID of the record where this mail has been put * or Mail_Queue_Error on error * @access public **/ function put($time_to_send, $id_user, $ip, $sender, $recipient, $headers, $body, $delete_after_send=true) { $id = $this->db->nextId($this->sequence); if (empty($id)) { return new Mail_Queue_Error(MAILQUEUE_ERROR, $this->pearErrorMode, E_USER_ERROR, __FILE__, __LINE__, 'Cannot create id in: '.$this->sequence); } $query = 'INSERT INTO '. $this->mail_table .' (id, create_time, time_to_send, id_user, ip' .', sender, recipient, delete_after_send) VALUES (' . $this->db->getIntegerValue($id) .', ' . $this->db->getTimestampValue(date("Y-m-d H:i:s")) .', ' . $this->db->getTimestampValue($time_to_send) .', ' . $this->db->getIntegerValue($id_user) .', ' . $this->db->getTextValue($ip) .', ' . $this->db->getTextValue($sender) .', ' . $this->db->getTextValue($recipient) .', ' . ($delete_after_send ? 1 : 0) .')'; $res = $this->db->query($query); if (MDB::isError($res)) { return new Mail_Queue_Error(MAILQUEUE_ERROR_QUERY_FAILED, $this->pearErrorMode, E_USER_ERROR, __FILE__, __LINE__, 'MDB: query failed - "'.$query.'" - '.$res->getMessage()); } foreach (array('headers', 'body') as $field) { $query = 'UPDATE ' . $this->mail_table .' SET ' .$field. '=?' .' WHERE id=' . $this->db->getIntegerValue($id); if ($prepared_query = $this->db->prepareQuery($query)) { $char_lob = array('Error' => '', 'Type' => 'data', 'Data' => $$field); if (MDB::isError($clob = $this->db->createLob($char_lob))) { return new Mail_Queue_Error(MAILQUEUE_ERROR_QUERY_FAILED, $this->pearErrorMode, E_USER_ERROR, __FILE__, __LINE__, 'MDB: query failed - "'.$query.'" - '.$clob->getMessage()); } $this->db->setParamClob($prepared_query,1,$clob,$field); if (MDB::isError($error = $this->db->executeQuery($prepared_query))) { return new Mail_Queue_Error(MAILQUEUE_ERROR_QUERY_FAILED, $this->pearErrorMode, E_USER_ERROR, __FILE__, __LINE__, 'MDB: query failed - "'.$query.'" - '.$res->getMessage()); } $this->db->destroyLob($clob); $this->db->freePreparedQuery($prepared_query); } else { //prepared query failed return new Mail_Queue_Error(MAILQUEUE_ERROR_QUERY_FAILED, $this->pearErrorMode, E_USER_ERROR, __FILE__, __LINE__, 'MDB: query failed - "'.$query.'" - '.$clob->getMessage()); } } return $id; } // }}} // {{{ countSend() /** * Check how many times mail was sent. * * @param object Mail_Queue_Body * @return mixed Integer or Mail_Queue_Error class if error. * @access public */ function countSend($mail) { if (!is_object($mail) || !is_a($mail, 'mail_queue_body')) { return new Mail_Queue_Error(MAILQUEUE_ERROR_UNEXPECTED, $this->pearErrorMode, E_USER_ERROR, __FILE__, __LINE__, 'Expected: Mail_Queue_Body class'); } $count = $mail->_try(); $query = 'UPDATE ' . $this->mail_table .' SET try_sent = ' . $this->db->getIntegerValue($count) .' WHERE id = ' . $this->db->getIntegerValue($mail->getId()); $res = $this->db->query($query); if (MDB::isError($res)) { return new Mail_Queue_Error(MAILQUEUE_ERROR_QUERY_FAILED, $this->pearErrorMode, E_USER_ERROR, __FILE__, __LINE__, 'MDB: query failed - "'.$query.'" - '.$res->getMessage()); } return $count; } // }}} // {{{ setAsSent() /** * Set mail as already sent. * * @param object Mail_Queue_Body object * @return bool * @access public */ function setAsSent($mail) { if (!is_object($mail) || !is_a($mail, 'mail_queue_body')) { return new Mail_Queue_Error(MAILQUEUE_ERROR_UNEXPECTED, $this->pearErrorMode, E_USER_ERROR, __FILE__, __LINE__, 'Expected: Mail_Queue_Body class'); } $query = 'UPDATE ' . $this->mail_table .' SET sent_time = '.$this->db->getTimestampValue(date("Y-m-d H:i:s")) .' WHERE id = '. $this->db->getIntegerValue($mail->getId()); $res = $this->db->query($query); if (MDB::isError($res)) { return new Mail_Queue_Error(MAILQUEUE_ERROR_QUERY_FAILED, $this->pearErrorMode, E_USER_ERROR, __FILE__, __LINE__, 'MDB: query failed - "'.$query.'" - '.$res->getMessage()); } return true; } // }}} // {{{ getMailById() /** * Return mail by id $id (bypass mail_queue) * * @param integer $id Mail ID * @return mixed Mail object or false on error. * @access public */ function getMailById($id) { $query = 'SELECT * FROM ' . $this->mail_table .' WHERE id = ' . $this->db->getTextValue($id); $res = $this->db->query($query); if (MDB::isError($res)) { return new Mail_Queue_Error(MAILQUEUE_ERROR_QUERY_FAILED, $this->pearErrorMode, E_USER_ERROR, __FILE__, __LINE__, 'MDB: query failed - "'.$query.'" - '.$res->getMessage()); } $row = $this->db->fetchRow($res, MDB_FETCHMODE_ASSOC); if (!is_array($row)) { return new Mail_Queue_Error(MAILQUEUE_ERROR_QUERY_FAILED, $this->pearErrorMode, E_USER_ERROR, __FILE__, __LINE__, 'MDB: query failed - "'.$query.'" - '.$res->getMessage()); }/*//DISABLED (using a standard query, without LOBs special management://it does not work with pgsql (there's probably a problem in the MDB pgsql driver) $query = 'SELECT id, create_time, time_to_send, sent_time' .', id_user, ip, sender, recipient, delete_after_send' .', try_sent FROM ' . $this->mail_table .' WHERE id = ' . $this->db->getTextValue($id); $res = $this->db->query($query); if (MDB::isError($res)) { return new Mail_Queue_Error(MAILQUEUE_ERROR_QUERY_FAILED, $this->pearErrorMode, E_USER_ERROR, __FILE__, __LINE__, 'MDB: query failed - "'.$query.'" - '.$res->getMessage()); } $row = $this->db->fetchRow($res, MDB_FETCHMODE_ASSOC); if (!is_array($row)) { return new Mail_Queue_Error(MAILQUEUE_ERROR_QUERY_FAILED, $this->pearErrorMode, E_USER_ERROR, __FILE__, __LINE__, 'MDB: query failed - "'.$query.'" - '.$res->getMessage()); } //now fetch lobs... foreach (array('headers','body') as $field) { $query = 'SELECT '.$field.' FROM ' . $this->mail_table .' WHERE id=' . $this->db->getIntegerValue($id); $res = $this->db->query($query); if (MDB::isError($res)) { //return new Mail_Queue_Error('MDB::query failed: ' // . $result->getMessage(), __FILE__, __LINE__); $row[$field] = ''; //Not sure if this is better than raising the error... } else { if ($this->db->endOfResult($res)) { //no rows returned $row[$field] = ''; } else { $clob = $this->db->fetchClob($res, 0, $field); if (MDB::isError($clob)) { return new Mail_Queue_Error(MAILQUEUE_ERROR_QUERY_FAILED, $this->pearErrorMode, E_USER_ERROR, __FILE__, __LINE__, 'MDB: query failed - "'.$query.'" - '.$clob->getMessage()); } $row[$field] = ''; while (!$this->db->endOfLOB($clob)) { if (MDB::isError($error = $this->db->readLob($clob, $data, 8192) < 0)) { return new Mail_Queue_Error(MAILQUEUE_ERROR_QUERY_FAILED, $this->pearErrorMode, E_USER_ERROR, __FILE__, __LINE__, 'MDB: query failed - "'.$query.'" - '.$error->getMessage()); } $row[$field] .= $data; unset($data); } $this->db->destroyLob($clob); } } }*/ return new Mail_Queue_Body( $row['id'], $row['create_time'], $row['time_to_send'], $row['sent_time'], $row['id_user'], $row['ip'], $row['sender'], $row['recipient'], unserialize($row['headers']), unserialize($row['body']), $row['delete_after_send'], $row['try_sent'] ); } // }}} // {{{ deleteMail() /** * Remove from queue mail with $id identifier. * * @param integer $id Mail ID * @return bool True on success else Mail_Queue_Error class * @access public */ function deleteMail($id) { $query = 'DELETE FROM ' . $this->mail_table .' WHERE id = ' . $this->db->getTextValue($id); $res = $this->db->query($query); if (MDB::isError($res)) { return new Mail_Queue_Error(MAILQUEUE_ERROR_QUERY_FAILED, $this->pearErrorMode, E_USER_ERROR, __FILE__, __LINE__, 'MDB: query failed - "'.$query.'" - '.$res->getMessage()); } return true; } // }}}}?>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -