The employer
Новичок
Никогда не было необходимости передавать в in что-то кроме чисел. Это вообще по большому счету костыль, который впервые понадобился полгода назад одному из наших разработчиков. Но тоже не вижу большой сложности найти решение для такого случая.Автор оригинала: dimagolov
The employer
понятно, что однородных. но там и строка и число и дата может быть. или по-твоему надо все в кавычки брать, как DiMA? я не считаю это правильным, так как если нужно число, то дергать базу для запроса val = 'zhopa' не стоит даже если 'zhopa' корректно экранирована.
Из этой фразы видно, что я сначала писал менее показательный пример (вставка одного поля), а потом решил написать более показательный (вставка двух полей разного типа). Откуда здесь можно сделать вывод который ты сделал - ума не приложу.Автор оригинала: dimagolov
The employer, вообще-то triumvirat живой код представил, который он уже написал и как-то протестировал. сравнивать его с измышлениями не стоит, а из этой фразы видно, что ты придумываешь синтаксис и функциональность по ходу написания сообщений, что не есть айс.
На всякий случай:
PHP:
svn log sm_db.class.php
------------------------------------------------------------------------
r144 | _ap | 2009-04-16 15:53:53 +0400 (Чт, 16 апр 2009) | 1 line
------------------------------------------------------------------------
r143 | _ap | 2009-04-16 11:05:01 +0400 (Чт, 16 апр 2009) | 1 line
------------------------------------------------------------------------
r136 | _ap | 2009-02-27 13:10:38 +0300 (Пт, 27 фев 2009) | 1 line
...
------------------------------------------------------------------------
r2 | ap | 2007-12-20 13:23:07 +0300 (Чт, 20 дек 2007) | 1 line
------------------------------------------------------------------------
PHP:
svn diff -r 136 sm_db.class.php
Index: sm_db.class.php
===================================================================
--- sm_db.class.php (revision 136)
+++ sm_db.class.php (working copy)
@@ -30,7 +30,7 @@
* @access private
* @var array
*/
- private $valid_placeholders = array( "i", "d", "s", "b", "n", "t", "f" );
+ private $valid_placeholders = array( "i", "d", "s", "b", "n", "t", "f", "a" );
/**
@@ -94,9 +94,15 @@
*
* @access public
* @param array $params = array (
- * "query" => value - запрос
- * , "binds" => array() - массив для подстановки в запрос
- * , "limit" => value - значения для ограничения выборки
+ * "query" => value - запрос
+ * , "binds" => array() - массив для подстановки в запрос
+ * , "limit" => value - значения для ограничения выборки
+ * , "callback" => string - имя функции, которой будет
+ * передана для обработки
+ * каждая строка получаемого рекордсета
+ * Параметры - номер строки, сама строка
+ * Результат - строка, которую нужно
+ * положить в рекордсет
* )
* @return array (
* "affected_rows" => value
@@ -155,7 +161,9 @@
$this->translated_query = $query;
- return $this->getResult( $query, $limit );
+ $callback = isset( $params["callback"] ) ? $params["callback"] : "";
+
+ return $this->getResult( $query, $limit, $callback );
} // function query()
@@ -282,15 +290,21 @@
* @access private
* @param string $query
* @param string $limit - значения для ограничения выборки
+ * @param string $callback - имя функции, которой будет
+ * передана для обработки
+ * каждая строка получаемого рекордсета
+ * Параметры - номер строки, сама строка
+ * Результат - строка, которую нужно
+ * положить в рекордсет
* @return array (
* "affected_rows" => value
* , "result" => array()
* )
*/
- private function getResult( $query, $limit = null ) {
+ private function getResult( $query, $limit = null, $callback = "" ) {
try {
- $res = $this->driver->getResult( $query, $limit );
+ $res = $this->driver->getResult( $query, $limit, $callback );
} catch ( Exception $e ) {
throw new sm_exception( $e->getMessage()."<br>SQL-query: ".$this->translated_query );
}
@@ -452,6 +466,41 @@
} // function placeholder_f()
+ /**
+ * Стандартный обработчик placeholder 'a'
+ *
+ * @access private
+ * @param (string|array) $bind = value1,value2,...,valueN || $bind = array(value1,value2,...,valueN)
+ * @return string - значения, которое можно использовать в IN (пример возврата: "('a','b')")
+ */
+ private function placeholder_a( $bind ) {
+
+ if (is_string($bind)) {
+ if ("" === $bind) {
+ $data = array();
+ } else {
+ $data = explode(",", $bind);
+ }
+ } else {
+ $data = $bind;
+ }
+
+ if (!is_array($data)) {
+ throw new sm_exception( "Incorrect type 'a': ".(string)$bind, 0 );
+ }
+
+ if (!count($data)) {
+ return "(null)";
+ }
+
+ foreach ($data as $k => $v) {
+ $data[$k] = "'" . $this->escape_string($v) . "'";
+ }
+
+ return "(" . join(",", $data) . ")";
+
+ } // function placeholder_a()
+
} // class sm_db
?>
\ No newline at end of file