За последние 24 часа нас посетили 16753 программиста и 1694 робота. Сейчас ищут 839 программистов ...

Вопрос по ООП.

Тема в разделе "PHP для новичков", создана пользователем alexander.pro, 23 апр 2009.

  1. alexander.pro

    alexander.pro Активный пользователь

    С нами с:
    11 июл 2008
    Сообщения:
    42
    Симпатии:
    0
    Адрес:
    Г. Кострома
    Вы хотите сказать, что

    PHP:
    1.  
    2. <?php
    3. if (!$this->define){
    4.                $this->SQL_Connect($myhost, $myname, $mypass);
    5.                 $this->SQL_SelectDB($mydata);
    6.                 $this->define = TRUE;
    7. }
    8. ?>
    9.  
    в SQL_ResultSet();?

    Извините конечно, что туплю...
     
  2. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    да, но $this->define = TRUE; сделать прямо в SQL_Connect() и SQL_SelectDB() там же
     
  3. alexander.pro

    alexander.pro Активный пользователь

    С нами с:
    11 июл 2008
    Сообщения:
    42
    Симпатии:
    0
    Адрес:
    Г. Кострома
    Ага спасибо, тогда получается что конструктор вообще не потребуется....
     
  4. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    ну, вообще-то всякие $myhost, $myname, $mypass, $mydata лучше принять в конструкторе, плюс инициализация переменных.
     
  5. Cron

    Cron Активный пользователь

    С нами с:
    10 июл 2008
    Сообщения:
    289
    Симпатии:
    0
    Адрес:
    Украина, Сумы
    PHP:
    1. public function SQL_ResultSet($SQLent)
    Можно сделать так:

    PHP:
    1. public function SQL_ResultSet($SQLent, $dbname=null)
    И в проверять по ходу: если пользователь указал другую БД, то вызвать mysql_select_db и переподключиться. Если база не указано (т.е. $dbname=null), значит пользователь делает запрос к той базе, которую указал в конструкторе.
     
  6. alexander.pro

    alexander.pro Активный пользователь

    С нами с:
    11 июл 2008
    Сообщения:
    42
    Симпатии:
    0
    Адрес:
    Г. Кострома
    Большое спасибо всем!!!
     
  7. alexander.pro

    alexander.pro Активный пользователь

    С нами с:
    11 июл 2008
    Сообщения:
    42
    Симпатии:
    0
    Адрес:
    Г. Кострома
    К этой же теме:
    Стал искать информацию по использованию 'подготовленных выражений' не в MYSQLi, набрел на код в книге 'Наиболее полное руководство PHP5', но не могу понять одну из строк.
    PHP:
    1.  
    2. return $conn !== null? mysql_query($query, $conn) : mysql_query($query);
    3.  
     
  8. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    А что именно тут непонятно?
     
  9. alexander.pro

    alexander.pro Активный пользователь

    С нами с:
    11 июл 2008
    Сообщения:
    42
    Симпатии:
    0
    Адрес:
    Г. Кострома
    Apple
    Да вообще...
    Судя по коду функция чего-то возвращает не равное 'null' да и то наверное я ошибаюсь.
     
  10. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    ?: — это языковая конструкция.

    Вот это:

    Код (Text):
    1.     return $conn !== null? mysql_query($query, $conn) : mysql_query($query);
    Можно переписать идентично:

    PHP:
    1. <?php
    2.    
    3.     // Обычный вариант с if
    4.     if($conn !== null) {
    5.         return mysql_query($query, $conn);
    6.     } else {
    7.         return mysql_query($query);
    8.     }
    9.  
    10.     // Альтернативный вариант:
    11.     return $conn !== null? mysql_query($query, $conn) : mysql_query($query);
    12.  
    13. ?>
     
  11. alexander.pro

    alexander.pro Активный пользователь

    С нами с:
    11 июл 2008
    Сообщения:
    42
    Симпатии:
    0
    Адрес:
    Г. Кострома
    Спасибо... Такой вариант наиболее понятен.
     
  12. alexander.pro

    alexander.pro Активный пользователь

    С нами с:
    11 июл 2008
    Сообщения:
    42
    Симпатии:
    0
    Адрес:
    Г. Кострома
    Пытаюсь заставить метод по составлению подготовленных выражений работать с несколькими ('?','?'), но в переменной где должен был оказаться готовый запрос, оказывается 'Array'. С вечера голову ломаю... Почему так?
    Код:
    PHP:
    1.  
    2. <?php
    3. public function SQL_Query(){ // Например: ('SELECT*FROM books WHERE id=? OR name=?', $id, $name)
    4.         if (!$this->define){ // Одно ли подключение
    5.             $this->SQL_Connect($this->host, $this->login, $this->password); // Соединяемся с MySQL
    6.             $this->SQL_SelectDB($this->db); // Выбираем базу
    7.                 $param = func_get_args(); // Заносим в массив аргументы
    8.                 $this->SQL_Make($param); // Передаем значения методу для формирования запроса
    9.         }
    10.  
    11. }
    12.  
    13. private function SQL_Make() {
    14.      $args = func_get_args();              
    15.     $template = &$args[0];
    16.     $template = str_replace("%", "%%", $template);
    17.     $template = str_replace("?", "%s", $template);
    18.      foreach ($args as $i=>$v) {
    19.          if (!$i) continue;
    20.          if (is_int($v)) continue;
    21.          $args[$i] = "'".mysql_escape_string($v)."'";;
    22.         }
    23.      $query = sprintf($template, $args[1]);
    24.     return $query; // Результат 'Array' :(
    25.   }
    26. ?>
    27.  
     
  13. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    боже, какой бред

    посмотри DbSimple

    совсем упрощённо можно сделать
    PHP:
    1. <?php
    2. function EscapeQuery($query,$var,$type)
    3. {
    4.     while(strpos($query,'?')){
    5.        $variable = array_shift($var);
    6.        $query = preg_replace('/(\?)/',"'".((array_shift($type)=='s')?mysql_real_escape_string($variable):((int)$variable))."'",$query,1);
    7.     }
    8.     return $query;
    9. }
    10.  
    11. $vars = array($_GET['id'],$_GET['name']);
    12. $types = array('d','s');
    13. echo EscapeQuery("SELECT * FROM `table_name` WHERE `id`=? AND `name`=?",$vars,$types);
    14. ?>
    не стоит её использовать