Вы хотите сказать, что PHP: <?php if (!$this->define){ $this->SQL_Connect($myhost, $myname, $mypass); $this->SQL_SelectDB($mydata); $this->define = TRUE; } ?> в SQL_ResultSet();? Извините конечно, что туплю...
ну, вообще-то всякие $myhost, $myname, $mypass, $mydata лучше принять в конструкторе, плюс инициализация переменных.
PHP: public function SQL_ResultSet($SQLent) Можно сделать так: PHP: public function SQL_ResultSet($SQLent, $dbname=null) И в проверять по ходу: если пользователь указал другую БД, то вызвать mysql_select_db и переподключиться. Если база не указано (т.е. $dbname=null), значит пользователь делает запрос к той базе, которую указал в конструкторе.
К этой же теме: Стал искать информацию по использованию 'подготовленных выражений' не в MYSQLi, набрел на код в книге 'Наиболее полное руководство PHP5', но не могу понять одну из строк. PHP: return $conn !== null? mysql_query($query, $conn) : mysql_query($query);
Apple Да вообще... Судя по коду функция чего-то возвращает не равное 'null' да и то наверное я ошибаюсь.
?: — это языковая конструкция. Вот это: Код (Text): return $conn !== null? mysql_query($query, $conn) : mysql_query($query); Можно переписать идентично: PHP: <?php // Обычный вариант с if if($conn !== null) { return mysql_query($query, $conn); } else { return mysql_query($query); } // Альтернативный вариант: return $conn !== null? mysql_query($query, $conn) : mysql_query($query); ?>
Пытаюсь заставить метод по составлению подготовленных выражений работать с несколькими ('?','?'), но в переменной где должен был оказаться готовый запрос, оказывается 'Array'. С вечера голову ломаю... Почему так? Код: PHP: <?php public function SQL_Query(){ // Например: ('SELECT*FROM books WHERE id=? OR name=?', $id, $name) if (!$this->define){ // Одно ли подключение $this->SQL_Connect($this->host, $this->login, $this->password); // Соединяемся с MySQL $this->SQL_SelectDB($this->db); // Выбираем базу $param = func_get_args(); // Заносим в массив аргументы $this->SQL_Make($param); // Передаем значения методу для формирования запроса } } private function SQL_Make() { $args = func_get_args(); $template = &$args[0]; $template = str_replace("%", "%%", $template); $template = str_replace("?", "%s", $template); foreach ($args as $i=>$v) { if (!$i) continue; if (is_int($v)) continue; $args[$i] = "'".mysql_escape_string($v)."'";; } $query = sprintf($template, $args[1]); return $query; // Результат 'Array' :( } ?>
боже, какой бред посмотри DbSimple совсем упрощённо можно сделать PHP: <?php function EscapeQuery($query,$var,$type) { while(strpos($query,'?')){ $variable = array_shift($var); $query = preg_replace('/(\?)/',"'".((array_shift($type)=='s')?mysql_real_escape_string($variable):((int)$variable))."'",$query,1); } return $query; } $vars = array($_GET['id'],$_GET['name']); $types = array('d','s'); echo EscapeQuery("SELECT * FROM `table_name` WHERE `id`=? AND `name`=?",$vars,$types); ?> не стоит её использовать