Guest User

Untitled

a guest
Oct 20th, 2016
234
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.80 KB | None | 0 0
  1. <?php
  2.  
  3.  
  4. /**
  5.  *
  6.  * @param string $connection_id
  7.  *
  8.  * @return PDO
  9.  */
  10. function connection($connection_id) {
  11.   $host = $_SERVER['SABENTIS_DB_HOST'];
  12.   $database = $_SERVER['SABENTIS_DB_DATABASE'];
  13.   $username =  $_SERVER['SABENTIS_DB_LOGIN'];
  14.   $password =  $_SERVER['SABENTIS_DB_PASSWORD'];
  15.  
  16.   static $connections = array();
  17.   if (!isset($connections[$connection_id])) {
  18.     $connection_options['pdo'] = array();
  19.     $connection_options['pdo'][PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
  20.     $connection_options['pdo'][PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE] = TRUE;
  21.     $connection_options['pdo'][PDO::ATTR_STRINGIFY_FETCHES] = FALSE;
  22.  
  23.     $cnn = new \PDO("sqlsrv:server=$host;Database=$database",  $username, $password, $connection_options['pdo']);
  24.     $connections[$connection_id] = $cnn;
  25.  
  26.   }
  27.   return $connections[$connection_id];
  28. }
  29.  
  30. /**
  31.  * Summary of prepare
  32.  *
  33.  * @param mixed $connection
  34.  * @param mixed $query
  35.  * @return PDOStatement
  36.  */
  37. function prepare($connection, $query, $buffered = TRUE) {
  38.   $pdo_options = array();
  39.   $pdo_options[PDO::ATTR_EMULATE_PREPARES] = TRUE;
  40.   $pdo_options[PDO::SQLSRV_ATTR_DIRECT_QUERY] = TRUE;
  41.   if ($buffered) {
  42.     $pdo_options[PDO::ATTR_CURSOR] = PDO::CURSOR_SCROLL;
  43.     $pdo_options[PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE] = PDO::SQLSRV_CURSOR_BUFFERED;
  44.   }
  45.   return $connection->prepare($query, $pdo_options);
  46. }
  47.  
  48. /**
  49.  * Summary of execute
  50.  *
  51.  * @param PDO $connection
  52.  * @param string $query
  53.  *
  54.  * @param PDOStatement;
  55.  */
  56. function execute($connection, $query, array $args = array(), $buffered = TRUE) {
  57.   $st = prepare($connection, $query, $buffered);
  58.   $st->execute($args);
  59.   return $st;
  60. }
  61.  
  62.  
  63. //*******************************************************
  64. // TEST BEGIN
  65. //*******************************************************
  66.  
  67. $connection = connection('default');
  68.  
  69. // Drop
  70. try {
  71.   execute($connection, 'DROP TABLE TEST');
  72. }
  73. catch(\Exception $e) {}
  74.  
  75.  
  76. // Recreate
  77. execute($connection, "CREATE TABLE TEST([id] [int] IDENTITY(1,1) NOT NULL, [myinteger] int, [mybiginteger] bigint, [myfloat] float, [mysmallint] smallint, [mybit] bit, [myreal] real, [mynvarchar] nvarchar(max))");
  78.  
  79. $sample_data = [
  80.     ':myinteger' => 25,
  81.     ':mybiginteger' =>1236544123211,
  82.     ':myfloat' =>23652.3221452,
  83.     ':mysmallint' =>5632,
  84.     ':mybit' => 1,
  85.     ':myreal' => 1256325.3214587,
  86.     ':mynvarchar' => 'en un lugar de la mancha de cuyo nombre no puedo acordarme...'
  87.   ];
  88.  
  89. $columns = array_keys($sample_data);
  90. array_walk($columns, function(&$item) {
  91.   $item = substr($item, 1, strlen($item) - 1);
  92. });
  93.  
  94. try {
  95.   execute($connection, "INSERT INTO TEST(" . implode(',', $columns) . ") VALUES(" . implode(',', array_keys($sample_data)) . ")", $sample_data);
  96.  
  97. }
  98. catch (\Throwable $error) {
  99.   echo $error->getMessage();
  100.   exit();
  101. }
  102.  
  103. $statement = execute($connection, "SELECT * FROM TEST");
  104.  
  105. $null = [];
  106. $columns = $statement->columnCount();
  107. for ($i = 0; $i < $columns; $i++) {
  108.   $meta = $statement->getColumnMeta($i);
  109.   $type = $meta['sqlsrv:decl_type'];
  110.   switch($type) {
  111.     case 'varbinary':
  112.       $null[$i] = NULL;
  113.       $statement->bindColumn($i + 1, $null[$i], PDO::PARAM_LOB, 0, PDO::SQLSRV_ENCODING_BINARY);
  114.       break;
  115.     case 'nvarchar':
  116.     case 'varchar':
  117.       $null[$i] = NULL;
  118.       $statement->bindColumn($i + 1, $null[$i], PDO::PARAM_STR, 0, PDO::SQLSRV_ENCODING_UTF8);
  119.       break;
  120.   }
  121. }
  122.  
  123. foreach ($statement as $row) {
  124.   foreach ($row as $key => $value) {
  125.     if (is_numeric($key)) {
  126.       continue;
  127.     }
  128.     echo "$key:" . gettype($value) . '<br/>';
  129.   }
  130. }
  131.  
  132. echo '<br/><br/>';
  133.  
  134. $statement = execute($connection, "SELECT * FROM TEST");
  135.  
  136. foreach ($statement as $row) {
  137.   foreach ($row as $key => $value) {
  138.     if (is_numeric($key)) {
  139.       continue;
  140.     }
  141.     echo "$key:" . gettype($value) . '<br/>';
  142.   }
  143. }
Advertisement
Add Comment
Please, Sign In to add comment