How to check pdo connection in php

I am writing an installer for one of my apps and I would like to be able to test some default database settings.

Is this possible using PDO to test valid and invalid database connections?

I have the following code:

try{
            $dbh = new pdo('mysql:host=127.0.0.1:3308;dbname=axpdb','admin','1234');
            die(json_encode(array('outcome' => true)));
        }catch(PDOException $ex){
            die(json_encode(array(
                'outcome' => false,
                'message' => 'Unable to connect'
            )));
        }

The problem I am having is that the script trys to connect until the script execution time of 60 seconds runs out instead of saying it cannot connect to the db.

Thanks

asked Jun 7, 2011 at 9:46

4

you need to set the error mode when connection to the database:

try{
    $dbh = new pdo( 'mysql:host=127.0.0.1:3308;dbname=axpdb',
                    'admin',
                    '1234',
                    array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    die(json_encode(array('outcome' => true)));
}
catch(PDOException $ex){
    die(json_encode(array('outcome' => false, 'message' => 'Unable to connect')));
}

for more infos see the following links:

Using MySQL with PDO

Errors and error handling

answered Jun 7, 2011 at 10:25

Sascha GalleySascha Galley

15.2k5 gold badges36 silver badges51 bronze badges

4

As @Sascha Galley already mentioned you should set error mode to exception mode. However, you should also set up PDO::ATTR_TIMEOUT attribute to prevent a long time waiting for response in some cases.

Although documentation says that behavior of this attribute is driver-dependent in case of MySQL it's a connection timeout. You won't find anything about it documentation but here's a short snippet from driver's source code:

long connect_timeout = pdo_attr_lval(driver_options, PDO_ATTR_TIMEOUT, 30 TSRMLS_CC);

answered Jun 7, 2011 at 10:33

CrozinCrozin

43.2k13 gold badges87 silver badges135 bronze badges

0

As seen e.g. in the comments at this answer (but hardly anywhere else, so I made it more visible here), the "classic" PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION solution does not always work.

The implementation of PDO::ERRMODE_EXCEPTION is broken, so it seems to be "leaking" in some cases.

For example:

Warning: PDO::__construct() [pdo.--construct]: [2002] No connection could be made because the target machine actively refused it. (trying to connect via tcp://localhost:3306) in [...] db.php on line 34

The code there:

try {
    $this->pdo = new PDO($cfg['DB'], $cfg['DB_USER'], $cfg['DB_PASS'],
        array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
} catch {
    echo("Can't open the database.");
}

The exception is thrown (and cought: I can see my message).

So, as a necessary workaround, you need to also put a @ (let's call it a "diaper operator" in this case) before new pdo(...) to actually keep it clean.

How to check pdo connection in php

PiTheNumber

21.9k17 gold badges103 silver badges173 bronze badges

answered Apr 25, 2014 at 8:48

Sz.Sz.

2,8911 gold badge29 silver badges38 bronze badges

2

There's a missing closing parenthese at the end of PDO::ERRMODE_EXCEPTION.

Should be:

$this->pdo = new PDO($cfg['DB'], $cfg['DB_USER'], $cfg['DB_PASS'],
    array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));

answered Jan 5, 2016 at 18:30

0

How do I know if PHP PDO is installed?

The -i is used to display the output of phpinfo(). The |grep will filter the list to the ones containing PDO.

What is PDO connection in PHP?

The PHP Data Objects (PDO) defines a lightweight interface for accessing databases in PHP. It provides a data-access abstraction layer for working with databases in PHP. It defines consistent API for working with various database systems.

How does PDO connect to database?

Summary.
Enable the PDO_MYSQL driver in the php. ini file for connecting to a MySQL database from PHP PDO..
Create an instance of the PDO class to make a connection to a MySQL database..
Use the PDO constructor or the setAttribute() method to set an error handling strategy..

How do I close a PDO connection in PHP?

The connection remains active for the lifetime of that PDO object. To close the connection, you need to destroy the object by ensuring that all remaining references to it are deleted—you do this by assigning null to the variable that holds the object.