public function save()
 {
     //		$this->_addTraceInfo(__FILE__, __METHOD__, __LINE__, "Executing...");
     if ($this->id == 0) {
         //			$this->_addTraceInfo(__FILE__, __METHOD__, __LINE__, "Saving New Session...");
         $this->_logVerbose('Saving New Session...');
         //echo('*** save (INSERT) ***');
         $this->_new = true;
         $sql = 'INSERT INTO ' . $this->sessionsTable . ' (session_dts, ascii_session_id, user_ip, user_id, last_visit_dts, user_agent, request_uri, referrer, is_cookie_detected)';
         $sql .= ' VALUES (';
         //			$sql .= $this->devData->dbDTS($this->thisVisitDTS);
         $sql .= 'Now()';
         $sql .= ',' . $this->dataConnection->dbString($this->phpSessionID);
         $sql .= ',' . $this->dataConnection->dbString($this->userIP);
         $sql .= ',' . $this->userID;
         //			$sql .= ',' . $this->dataConnection->dbDTS($this->thisVisitDTS);
         $sql .= ',Now()';
         $sql .= ',' . $this->dataConnection->dbString($this->userAgent);
         if ($this->_isConsole) {
             $sql .= ',' . $this->dataConnection->dbString('** Console **');
         } else {
             $sql .= ',' . $this->dataConnection->dbString('http://' . $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"]);
         }
         if (isset($_SERVER["HTTP_REFERER"])) {
             //$this->_strReferrer = $_SERVER["HTTP_REFERER"];
             $sql .= ',' . $this->dataConnection->dbString($_SERVER["HTTP_REFERER"]);
         } else {
             $sql .= ',null';
         }
         $sql .= ',' . $this->dataConnection->dbBoolean($this->_cookieDetected);
         //            $sql .= ',-1';
         $sql .= ')';
     } else {
         //			$this->_addTraceInfo(__FILE__, __METHOD__, __LINE__, "Saving Existing Session...");
         $this->_logVerbose('Saving Existing Session...');
         //$this->_isNew = false;
         $sql = 'UPDATE ' . $this->sessionsTable . ' SET';
         //$sql .= 'ascii_session_id=' . $this->_devData->dbString($this->_phpSessionID);
         //$sql .= ', user_ip=' . $this->_devData->dbString($this->_userIP);
         $sql .= ' user_id=' . intval($this->userID);
         //$sql .= ', user_agent=' . $this->_devData->dbString($this->_userAgent);
         //			$sql .= ', last_visit_dts=' . $this->devData->dbDTS($this->thisVisitDTS);
         $sql .= ', last_visit_dts=Now()';
         $sql .= ', is_cookie_detected=' . $this->dataConnection->dbBoolean($this->_cookieDetected);
         //            $sql .= ', is_cookie_detected=-1';
         $sql .= ' WHERE session_id=' . $this->id;
     }
     $isOk = $this->dataConnection->execute($sql);
     if ($this->id == 0) {
         $sql = "SELECT LAST_INSERT_ID() AS id, Now() AS nowDTS;";
         $objRS = $this->dataConnection->execute($sql);
         if ($objRS->read()) {
             $this->id = $objRS->data('id');
             $this->lastVisitDTS = $objRS->data('nowDTS');
             $this->thisVisitDTS = $objRS->data('nowDTS');
         }
         $objRS->close();
     }
     return $isOk;
 }
 /**
  * @param anvilDataConnectionAbstract $dataConnection
  *
  * @return DateTime|float|int|null|string
  */
 public function toSave($dataConnection)
 {
     $return = '';
     switch ($this->fieldType) {
         case self::DATA_TYPE_BOOLEAN:
             $return = $dataConnection->dbBoolean($this->_value);
             break;
         case self::DATA_TYPE_DATE:
             $value = isset($this->_value) ? $this->_value : ($this->allowNull ? null : $this->defaultValue);
             $return = $value;
             if (!is_null($value)) {
                 $value = new DateTime($value, new DateTimeZone('UTC'));
                 $return = $value->format($dataConnection->dateFormat);
                 $return = $dataConnection->dbDate($return);
             }
             break;
         case self::DATA_TYPE_DTS:
             $value = !empty($this->_value) ? $this->_value : ($this->allowNull ? null : $this->defaultValue);
             $return = $value;
             if (!is_null($value)) {
                 $value = new DateTime($value, new DateTimeZone('UTC'));
                 $return = $value->format($dataConnection->dtsFormat);
                 $return = $dataConnection->dbDTS($return);
             }
             break;
         case self::DATA_TYPE_PHONE:
             $value = '';
             if (isset($this->_value)) {
                 $pattern = '/[^0-9]*/';
                 $value = preg_replace($pattern, '', $this->_value);
             }
             $return = $value != '' ? $dataConnection->dbString($value) : ($this->allowNull ? null : (isset($this->defaultValue) ? $dataConnection->dbString($this->defaultValue) : $dataConnection->dbString('')));
             if ($return == '') {
                 $return = null;
             }
             break;
         case self::DATA_TYPE_STRING:
             $return = isset($this->_value) ? $dataConnection->dbString($this->_value) : ($this->allowNull ? null : (isset($this->defaultValue) ? $dataConnection->dbString($this->defaultValue) : $dataConnection->dbString('')));
             if ($return == '') {
                 $return = null;
             }
             break;
         case self::DATA_TYPE_ADD_DTS:
             $return = 'NOW()';
             break;
         case self::DATA_TYPE_DECIMAL:
         case self::DATA_TYPE_FLOAT:
             $return = isset($this->_value) ? floatval($this->_value) : ($this->allowNull ? null : (isset($this->defaultValue) ? $this->defaultValue : 0));
             break;
         case self::DATA_TYPE_NUMBER:
         default:
             $return = isset($this->_value) ? intval($this->_value) : ($this->allowNull ? null : (isset($this->defaultValue) ? $this->defaultValue : 0));
             break;
     }
     if (is_null($return)) {
         $return = 'null';
     }
     return $return;
 }