/dbal/src/drivers/mssql/lmbMssqlStatement.class.php

https://github.com/kugu/limb · PHP · 204 lines · 166 code · 25 blank · 13 comment · 20 complexity · c14c66c75e1765d900b7eb0eb24f695c MD5 · raw file

  1. <?php
  2. /*
  3. * Limb PHP Framework
  4. *
  5. * @link http://limb-project.com
  6. * @copyright Copyright &copy; 2004-2007 BIT(http://bit-creative.com)
  7. * @license LGPL http://www.gnu.org/copyleft/lesser.html
  8. */
  9. lmb_require('limb/dbal/src/drivers/lmbDbStatement.interface.php');
  10. /**
  11. * class lmbMssqlStatement.
  12. *
  13. * @package dbal
  14. * @version $Id: lmbMssqlStatement.class.php,v 1.1.1.1 2009/06/08 11:57:21 mike Exp $
  15. */
  16. class lmbMssqlStatement implements lmbDbStatement
  17. {
  18. protected $statement;
  19. protected $connection;
  20. protected $parameters = array();
  21. function __construct($connection, $sql)
  22. {
  23. $this->statement = $sql;
  24. $this->connection = $connection;
  25. }
  26. function setConnection($connection)
  27. {
  28. $this->connection = $connection;
  29. }
  30. function setNull($name)
  31. {
  32. $this->parameters[$name] = 'null';
  33. }
  34. function setBit($name, $value)
  35. {
  36. $this->parameters[$name] = decbin($value);
  37. }
  38. function setSmallInt($name, $value)
  39. {
  40. $this->parameters[$name] = is_null($value) ? 'null' : intval($value);
  41. }
  42. function setInteger($name, $value)
  43. {
  44. $this->parameters[$name] = is_null($value) ? 'null' : intval($value);
  45. }
  46. function setFloat($name, $value)
  47. {
  48. $this->parameters[$name] = is_null($value) ?
  49. 'null' :
  50. floatval($value);
  51. }
  52. function setDouble($name, $value)
  53. {
  54. if(is_float($value) || is_integer($value))
  55. {
  56. $this->parameters[$name] = $value;
  57. }
  58. else if(is_string($value) && preg_match('/^(|-)\d+(|.\d+)$/', $value))
  59. {
  60. $this->parameters[$name] = $value;
  61. }
  62. else
  63. {
  64. $this->parameters[$name] = 'null';
  65. }
  66. }
  67. function setDecimal($name, $value)
  68. {
  69. if(is_float($value) || is_integer($value))
  70. {
  71. $this->parameters[$name] = $value;
  72. }
  73. else if(is_string($value) && preg_match('/^(|-)\d+(|.\d+)$/', $value))
  74. {
  75. $this->parameters[$name] = $value;
  76. }
  77. else
  78. {
  79. $this->parameters[$name] = 'null';
  80. }
  81. }
  82. function setBoolean($name, $value)
  83. {
  84. $this->parameters[$name] = is_null($value) ?
  85. 'null' :(($value) ? '1' : '0');
  86. }
  87. function setChar($name, $value)
  88. {
  89. $this->parameters[$name] = is_null($value) ?
  90. 'null' :
  91. "'" . (string) $this->connection->escape($value) . "'";
  92. }
  93. function setVarChar($name, $value)
  94. {
  95. $this->parameters[$name] = is_null($value) ?
  96. 'null' :
  97. "'" . (string) $this->connection->escape($value) . "'";
  98. }
  99. function setClob($name, $value)
  100. {
  101. $this->parameters[$name] = is_null($value) ?
  102. 'null' :
  103. "'" . (string) $this->connection->escape($value) . "'";
  104. }
  105. protected function _setDate($name, $value, $format)
  106. {
  107. if(is_int($value))
  108. {
  109. $this->parameters[$name] = "'" . date($format, $value) . "'";
  110. }
  111. else if(is_string($value))
  112. {
  113. $this->parameters[$name] = "'" . (string) $value . "'";
  114. }
  115. else
  116. {
  117. $this->parameters[$name] = 'null';
  118. }
  119. }
  120. function setDate($name, $value)
  121. {
  122. $this->_setDate($name, $value, 'Y-m-d');
  123. }
  124. function setTime($name, $value)
  125. {
  126. $this->_setDate($name, $value, 'H:i:s');
  127. }
  128. function setTimeStamp($name, $value)
  129. {
  130. $this->_setDate($name, $value, 'Y-m-d H:i:s');
  131. }
  132. function setBlob($name, $value)
  133. {
  134. $this->setChar($name, $value);
  135. }
  136. function set($name, $value)
  137. {
  138. if(is_string($value))
  139. {
  140. $this->setChar($name, $value);
  141. }
  142. else if(is_int($value))
  143. {
  144. $this->setInteger($name, $value);
  145. }
  146. else if(is_bool($value))
  147. {
  148. $this->setBoolean($name, $value);
  149. }
  150. else if(is_float($value))
  151. {
  152. $this->setFloat($name, $value);
  153. }
  154. else
  155. {
  156. $this->setNull($name);
  157. }
  158. }
  159. function import($paramList)
  160. {
  161. foreach($paramList as $name=>$value)
  162. {
  163. $this->set($name, $value);
  164. }
  165. }
  166. function getSQL()
  167. {
  168. $sql = $this->statement;
  169. foreach($this->parameters as $key => $value)
  170. {
  171. $sql = str_replace(':' . $key . ':', $value, $sql);
  172. }
  173. return $sql;
  174. }
  175. function execute()
  176. {
  177. return $this->connection->executeStatement($this);
  178. }
  179. }