pear & DB

IgoX

Новичок
pear & DB

Привет всем
Есть необходимость использовать DB.
pear не устанавливал как положенно просто скопировал pear.php, DB.php и папку DB к себе в DocumentRoot.
Вот код
error_reporting(E_ALL);
require_once("pear\\DB.php");
$TypeSQL='mysql';
$Host='localhost';
$User='root';
$Password='';
$Dbase='try';
$dsn="\$TypeSQL://\$User:\$Password@\$Host/\$Dbase";
$db=DB::connect($dsn, false);
$db->setFetchMode(DB_FETCHMODE_ASSOC);
$result=$db->execute("SELECT * FROM names_tbl");
if (DB::isError($result))
{echo $result->getMessage();}
Вот ругается Call to undefined function: setfetchmode() хотя в папке DB есть файл common.php. И еще странно если специально неправильно указать данные подключения то ошибки не выводятся.
Спасибо
 

Demiurg

Guest
а почему доллары заэкранированы в dsn ?
 

Said

Guest
пропиши в начале

PEAR::setErrorHandling(PEAR_ERROR_PRINT);

чтобы видеть ошибки pear
 

IgoX

Новичок
Спасибо за "\" проблема с Call to undefined function отпала а вот почему ошибки так и не пишутся непонятно.
А устанавливать (http://pear.php.net/manual/en/installation.getting.php) так нехочется, самому разобраться нужно так как РНР, сервер БД и программа будет устанавливать из созданного бинарника на Builder.
PEAR::setErrorHandling(PEAR_ERROR_PRINT); все равно ни чего не видно (ошибки)
 

IgoX

Новичок
Вот что странное заметил если написать echo 'hello word'; перед $db=DB::connect($dsn, false); то выводит, а если где угодно ниже то нет.
 

Verk

Guest
да, там в DB::connect() плюшки (@) в нескольких местах стоят, отчего ошибки-то и не выводятся.
 

IgoX

Новичок
Несовсем понятно про @, если можно по подробней.
Вот взято из help

Most variations are allowed: phptype://username:password@protocol+hostspec:110//usr/db_file.db
phptype://username:password@hostspec/database_name
phptype://username:password@hostspec
phptype://username@hostspec
phptype://hostspec/database
phptype://hostspec
phptype(dbsyntax)
phptype

Example 20-1. Connect and disconnect
require_once 'DB.php';
$user = 'foo';
$pass = 'bar';
$host = 'localhost';
$db_name = 'clients_db';// Data Source Name: This is the universal connection string
$dsn = "mysql://$user:$pass@$host/$db_name";// DB::connect will return a PEAR DB object on success// or an PEAR DB Error object on error
$db = DB::connect($dsn);// With DB::isError you can differentiate between an error or// a valid connection.
if (DB::isError($db))
{
die ($db->getMessage());
}
Вроде почти так же но почему неработает даже echo.
 

Verk

Guest
я не про dsn, я про @-заглушки ошибок.
отредактируй файл DB.php и убелри в функции
PHP:
function &connect($dsn, $options = false)
плюшки перед

PHP:
@include_once "DB/${type}.php";
и
PHP:
@$obj =& new $classname;
какая-то из них наверняка выдает ошибку и останавливает работу скрипта, а @ все глушит.
 

IgoX

Новичок
Спасибо это то что надо.
Только я непойму почему разработчики так сделали.
Еще раз спасибо теперь разберусь.
 

Verk

Guest
Проблема в твоих настройках, скорее всего не прописан путь к подкаталогам.
Иначе все работает как надо, так что как настроишь верни все как было :)
 
Сверху