/**
  * Low level handling getting a row from a result set; automatically
  * makes all fetched values strings, just like the other PHP db functions.
  * We have to do this since the sqlsrv extension returns row values in thier
  * native types, which causes problems with how we handle things.
  *
  * @param  resource $result
  * @return array
  */
 private function _fetchRowAssoc($result)
 {
     if (!is_resource($result)) {
         return false;
     }
     $row = array();
     $fieldnames = $this->getFieldsArray($result);
     $fieldMetaData = sqlsrv_field_metadata($result);
     if (sqlsrv_fetch($result)) {
         for ($i = 0; $i < sqlsrv_num_fields($result); $i++) {
             if ($fieldMetaData[$i]['Type'] == -9 || $fieldMetaData[$i]['Type'] >= SQLSRV_SQLTYPE_NVARCHAR(1) && $fieldMetaData[$i]['Type'] <= SQLSRV_SQLTYPE_NVARCHAR(8000) || $fieldMetaData[$i]['Type'] >= SQLSRV_SQLTYPE_NCHAR(1) && $fieldMetaData[$i]['Type'] <= SQLSRV_SQLTYPE_NCHAR(8000) || $fieldMetaData[$i]['Type'] == SQLSRV_SQLTYPE_NVARCHAR('max') || $fieldMetaData[$i]['Type'] == SQLSRV_SQLTYPE_NCHAR('max')) {
                 $row[$fieldnames[$i]] = iconv("utf-16le", "utf-8", sqlsrv_get_field($result, $i, SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_BINARY)));
             } else {
                 $row[$fieldnames[$i]] = sqlsrv_get_field($result, $i, SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR));
             }
         }
     } else {
         sqlsrv_free_stmt($result);
     }
     return $row;
 }
Example #2
0
 protected function getSqlType()
 {
     $sqlType = null;
     $phpType = null;
     switch ($this->type) {
         case SqlParameterTypes::SqlInt:
             $sqlType = SQLSRV_SQLTYPE_INT;
             $phpType = SQLSRV_PHPTYPE_INT;
             break;
         case SqlParameterTypes::SqlBigInt:
             $sqlType = SQLSRV_SQLTYPE_BIGINT;
             $phpType = SQLSRV_PHPTYPE_INT;
             break;
         case SqlParameterTypes::SqlBit:
             $sqlType = SQLSRV_SQLTYPE_BIT;
             $phpType = SQLSRV_PHPTYPE_INT;
             break;
         case SqlParameterTypes::SqlFloat:
             $sqlType = SQLSRV_SQLTYPE_FLOAT;
             $phpType = SQLSRV_PHPTYPE_FLOAT;
             break;
         case SqlParameterTypes::SqlDecimal:
             $sqlType = SQLSRV_SQLTYPE_DECIMAL($this->precision, $this->scale);
             $phpType = SQLSRV_PHPTYPE_FLOAT;
             break;
         case SqlParameterTypes::SqlNVarChar:
             $sqlType = SQLSRV_SQLTYPE_NVARCHAR($this->size);
             $phpType = SQLSRV_PHPTYPE_STRING("UTF-8");
             break;
         case SqlParameterTypes::SqlNVarCharMax:
             $sqlType = SQLSRV_SQLTYPE_NVARCHAR('max');
             $phpType = SQLSRV_PHPTYPE_STRING("UTF-8");
             break;
         case SqlParameterTypes::SqlXml:
             $sqlType = SQLSRV_SQLTYPE_XML;
             $phpType = SQLSRV_PHPTYPE_STREAM(SQLSRV_ENC_BINARY);
             break;
         case SqlParameterTypes::SqlUniqueIdentifier:
             $sqlType = SQLSRV_SQLTYPE_UNIQUEIDENTIFIER;
             $phpType = SQLSRV_PHPTYPE_STRING("UTF-8");
             break;
         case SqlParameterTypes::SqlTinyInt:
             $sqlType = SQLSRV_SQLTYPE_TINYINT;
             $phpType = SQLSRV_PHPTYPE_INT;
             break;
         case SqlParameterTypes::SqlDate:
             $sqlType = SQLSRV_SQLTYPE_DATE;
             $phpType = SQLSRV_PHPTYPE_DATETIME;
             break;
         case SqlParameterTypes::SqlDateTime:
             $sqlType = SQLSRV_SQLTYPE_DATETIME;
             $phpType = SQLSRV_PHPTYPE_DATETIME;
             break;
         case SqlParameterTypes::SqlTime:
             $sqlType = SQLSRV_SQLTYPE_TIME;
             $phpType = SQLSRV_PHPTYPE_DATETIME;
             break;
         case SqlParameterTypes::SqlTimestamp:
             $sqlType = SQLSRV_SQLTYPE_TIMESTAMP;
             $phpType = SQLSRV_PHPTYPE_DATETIME;
             break;
     }
     return array($sqlType, $phpType);
 }