|
|
|
|
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", то он срабатывает, а обращение к реальной таблице - не хочет.
Что сдесь неправильно? Или обращаться к БД из конструктора недопустимо?
И почему в конструкторе не выводятся сообщения об ошибках? | |
|
|
|
|
|
|
|
для: Хулиган
(10.02.2008 в 13:17)
| | mysql_select_db где?
И какова область видимости $host, $user, $pwd ? | |
|
|
|
|
|
|
|
для: Trianon
(10.02.2008 в 13:32)
| | И какова область видимости $host, $user, $pwd ?
Были за пределами конструктора. Думал, что видно эти переменные, оказалось, что не видно.
Спасибо. | |
|
|
|
|
|
|
|
для: Хулиган
(10.02.2008 в 15:09)
| | А какой вообще прок открывать соединение в конструкторе, а не заранее? | |
|
|
|
|
|
|
|
для: Trianon
(10.02.2008 в 15:31)
| | такой же, какой и от использования user, host, pwd, определенных за пределами конструктора... | |
|
|
|
|
|
|
|
для: 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);;
}
}
?>
|
Вот почему приходится открывать ещё одно соединение в конструкторе. | |
|
|
|
|
|
|
|
для: Хулиган
(10.02.2008 в 22:45)
| | а как оно должно работать? если в конструкторе нет ни echo, ни записей в лог, как можно понять, что оно работает?
есть какие то ошибки? | |
|
|
|
|
|
|
|
для: mechanic
(11.02.2008 в 09:28)
| | Упустил из виду, что это класс, который генерит картинку, а не html-страницу. Видимо echo потому и не работает, что вывод происходит не в страницу, а в тело картинки.
Есть ошибка в коде или нет, я определяю по факту отображения картинки. Коль скоро при ошибке картинка не отображается, то и echo никакой отладочной информации не выведет. Попросту некуда выводить.
А про возможность вывода в лог я забыл :) В лог пишется, только при этом генерация картинки не происходит (даже при правильном коде). А если закомментировать вывод в лог - картинка генерится. | |
|
|
|