Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как отследить, что происходит в конструкторе?
 
 автор: Хулиган   (10.02.2008 в 13:17)   письмо автору
 
 

class MYCLASS{
    function MYCLASS($inputvar){
        //тут действия с $inputvar
    }
}

По ряду причин $inputvar использовать неудобно, было бы удобнее брать данные из БД. Но почему-то не удается.
class MYCLASS{
    function MYCLASS(){
        $result = mysql_connect($host, $user, $pwd) or die ("Could not connect");
        $r = mysql_query("SELECT `capstring` FROM `capts` WHERE `ID` = '2117008368'");
        $ri = mysql_fetch_row($r);
        $inputvar = $ri[0];
    }
}


Никаких ошибок не выводится (даже если их явно заложить в код). Не удается ничего отследить, что происходит в конструкторе. Никакие echo также не выводятся.
Запрос заведомо правильный (проверял в phpmyadmin).
Если использовать тестовый запрос "SELECT 12345+1", то он срабатывает, а обращение к реальной таблице - не хочет.
Что сдесь неправильно? Или обращаться к БД из конструктора недопустимо?
И почему в конструкторе не выводятся сообщения об ошибках?

   
 
 автор: Trianon   (10.02.2008 в 13:32)   письмо автору
 
   для: Хулиган   (10.02.2008 в 13:17)
 

mysql_select_db где?
И какова область видимости $host, $user, $pwd ?

   
 
 автор: Хулиган   (10.02.2008 в 15:09)   письмо автору
 
   для: Trianon   (10.02.2008 в 13:32)
 

И какова область видимости $host, $user, $pwd ?
Были за пределами конструктора. Думал, что видно эти переменные, оказалось, что не видно.
Спасибо.

   
 
 автор: Trianon   (10.02.2008 в 15:31)   письмо автору
 
   для: Хулиган   (10.02.2008 в 15:09)
 

А какой вообще прок открывать соединение в конструкторе, а не заранее?

   
 
 автор: mechanic   (10.02.2008 в 16:33)   письмо автору
 
   для: Trianon   (10.02.2008 в 15:31)
 

такой же, какой и от использования user, host, pwd, определенных за пределами конструктора...

   
 
 автор: Хулиган   (10.02.2008 в 22:45)   письмо автору
 
   для: mechanic   (10.02.2008 в 16:33)
 

А какой вообще прок открывать соединение в конструкторе, а не заранее?

Объясняю на примере:

<?
    $host 
"localhost"$user "user"$pwd "pass"$dbname "dbase";
    
$link mysql_connect($host$user$pwd) or die ("Could not connect");
    
mysql_select_db ($dbname) or die ("Could not select database");
    
// вывод содержимого таблицы
    
---------------------------------
    
//создание экземпляра класса
    
$cls = new MYCLASS($id);

    
// закрытие соединения
    
mysql_close($link);
?>
<?
class MYCLASS{
    function 
MYCLASS($inputid){
        
$r mysql_query("SELECT `capstring` FROM `capts` WHERE ID = $inputid");
        
$ri mysql_fetch_row($r);
        
$inputvar $ri[0];
    }
}
?>

Эта схема не работает, хотя на момент инициализации класса соединение уже открыто и выбрана именно нужная база.
Почему - не знаю.

А вот такой вариант конструктора работает (при неизменном вызывающем коде):
<?
class MYCLASS{
    function 
MYCLASS($inputid){
        
$host "localhost"$user "user"$pwd "pass"$dbname "dbase";
        
$link mysql_connect($host$user$pwd) or die ("Could not connect");
        
mysql_select_db ($dbname) or die ("Could not select database");
        
$result mysql_query("SELECT capstring FROM `capts` WHERE ID = $inputid");
        
$r mysql_fetch_row($result);
        
$inp $r[0];
        
mysql_close($link);;
    }
}
?>


Вот почему приходится открывать ещё одно соединение в конструкторе.

   
 
 автор: mechanic   (11.02.2008 в 09:28)   письмо автору
 
   для: Хулиган   (10.02.2008 в 22:45)
 

а как оно должно работать? если в конструкторе нет ни echo, ни записей в лог, как можно понять, что оно работает?
есть какие то ошибки?

   
 
 автор: Хулиган   (11.02.2008 в 12:14)   письмо автору
 
   для: mechanic   (11.02.2008 в 09:28)
 

Упустил из виду, что это класс, который генерит картинку, а не html-страницу. Видимо echo потому и не работает, что вывод происходит не в страницу, а в тело картинки.
Есть ошибка в коде или нет, я определяю по факту отображения картинки. Коль скоро при ошибке картинка не отображается, то и echo никакой отладочной информации не выведет. Попросту некуда выводить.
А про возможность вывода в лог я забыл :) В лог пишется, только при этом генерация картинки не происходит (даже при правильном коде). А если закомментировать вывод в лог - картинка генерится.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования