FUDforum
Fast Uncompromising Discussions. FUDforum will get your users talking.

Home » Imported messages » comp.lang.php » PEAR DB: "PHP Fatal error: Call to undefined method DB::query()"
Show: Today's Messages :: Unread Messages :: Show Polls :: Message Navigator
| Subscribe to topic | Bookmark topic 
Switch to threaded view of this topic Create a new topic Submit Reply
PEAR DB: "PHP Fatal error: Call to undefined method DB::query()" [message #180207] Tue, 29 January 2013 04:03 Go to next message
Robert S is currently offline  Robert S
Messages: 2
Registered: January 2013
Karma: 0
Junior Member
add to buddy list
ignore all messages by this user
I have the following code:

<?php
require_once( 'DB.php' );
$dsn = 'mysql://user:password@localhost/table';
$dbh = new DB();
$dbh->connect( $dsn );
if ( $dbh->isError( $dbh )) die ( $dbh->getMessage );
$query = "SELECT * FROM Table ORDER BY Date LIMIT 1";
$sth = $dbh->query( $query );
?>

I get:

PHP Fatal error: Call to undefined method DB::query()

Can somebody tell me where I am going wrong? This all worked using my old code, but I got a lot of warnings about non static methods being called statically:

$dbh = DB::connect( $dsn );
if ( DB::isError( $dbh )) die ( $dbh->getMessage );
$sth = $dbh->query( $query );
Re: PEAR DB: "PHP Fatal error: Call to undefined method DB::query()" [message #180208 is a reply to message #180207] Tue, 29 January 2013 04:19 Go to previous messageGo to next message
Christoph Becker is currently offline  Christoph Becker
Messages: 91
Registered: June 2012
Karma: 0
Member
add to buddy list
ignore all messages by this user
Robert S wrote:

> Can somebody tell me where I am going wrong? This all worked using
> my old code, but I got a lot of warnings about non static methods
> being called statically:

Apparently DB::connect() doesn't return an instance of the DB class. So
instead of

$dbh->connect( $dsn );

you have to call

$dbh = $dbh->connect( $dsn );

But probably it's better to stick with your old code, and declare static
methods as such in the DB class:

public static function connect($dsn) {...}

--
Christoph M. Becker
Re: PEAR DB: "PHP Fatal error: Call to undefined method DB::query()" [message #180211 is a reply to message #180208] Tue, 29 January 2013 05:35 Go to previous messageGo to next message
Robert S is currently offline  Robert S
Messages: 2
Registered: January 2013
Karma: 0
Junior Member
add to buddy list
ignore all messages by this user
>
> $dbh = $dbh->connect( $dsn );
>
That seems to work. I still get messages like this:

PHP Strict Standards: Non-static method DB::isError() should not be called statically, assuming $this from incompatible context in /usr/share/php/DB/common.php on line 1217, referer: http://blah ..

> But probably it's better to stick with your old code, and declare static
> methods as such in the DB class:
> public static function connect($dsn) {...}
>
Where do I declare this? Is it in my code or in DB.php?
Re: PEAR DB: "PHP Fatal error: Call to undefined method DB::query()" [message #180214 is a reply to message #180211] Tue, 29 January 2013 06:20 Go to previous messageGo to next message
Christoph Becker is currently offline  Christoph Becker
Messages: 91
Registered: June 2012
Karma: 0
Member
add to buddy list
ignore all messages by this user
Robert S wrote:

> Where do I declare this? Is it in my code or in DB.php?

It is in the file where class DB is defined (probably DB.php), which
seems to have been written for PHP 4, where the "static" keyword was not
allowed for class members.

You might consider to switch to another DB abstraction layer, e.g. PDO
(<http://php.net/manual/en/book.pdo.php>).

--
Christoph M. Becker
Re: PEAR DB: "PHP Fatal error: Call to undefined method DB::query()" [message #180215 is a reply to message #180207] Tue, 29 January 2013 07:58 Go to previous message
Jerry Stuckle is currently offline  Jerry Stuckle
Messages: 2598
Registered: September 2010
Karma: 0
Senior Member
add to buddy list
ignore all messages by this user
On 1/29/2013 4:03 AM, Robert S wrote:
> I have the following code:
>
> <?php
> require_once( 'DB.php' );
> $dsn = 'mysql://user:password@localhost/table';
> $dbh = new DB();
> $dbh->connect( $dsn );
> if ( $dbh->isError( $dbh )) die ( $dbh->getMessage );
> $query = "SELECT * FROM Table ORDER BY Date LIMIT 1";
> $sth = $dbh->query( $query );
> ?>
>
> I get:
>
> PHP Fatal error: Call to undefined method DB::query()
>
> Can somebody tell me where I am going wrong? This all worked using my old code, but I got a lot of warnings about non static methods being called statically:
>
> $dbh = DB::connect( $dsn );
> if ( DB::isError( $dbh )) die ( $dbh->getMessage );
> $sth = $dbh->query( $query );
>

OK, it used to work but doesn't now. What changed?

You do have some problems in your code. For instance, you are not
saving the object returned by the connect() method. You can find an
example at
http://pear.php.net/manual/en/package.database.db.intro-query.php for
the proper way to do a query. Also, the fact you had warnings earlier
should have been a red flag. They are there for a reason.

However, beware that the PEAR DB package has been replaced by the PEAR
MDB2 package. The former is no longer being maintained and should not
be used.

Rather, I recommend you use a the PHP PDO class. It will require some
rewriting of your code, but you're going to have to do that anyway.

BTW - it's almost never a good idea to modify the code in packages. It
always leads to more work in the long run as you have to maintain the
modified code as well as your own.

--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex(at)attglobal(dot)net
==================
Quick Reply
Formatting Tools:   
  Switch to threaded view of this topic Create a new topic
Previous Topic: my blog
Next Topic: Formatting a number
Goto Forum:
  

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ]

Current Time: Sun Dec 10 23:11:27 EST 2017

Total time taken to generate the page: 0.00618 seconds