@AnttiKarttunen
I actually work with PHP quite a bit, so if you can share the rest of the class, I can take a look at what’s running to see where there may be an issue. The snippet you provided cites a getPdo
method, but I don’t see a reference to that.
As a quick reference, here’s a really simple MySQL Class that uses PDO.
<?php
use PDO;
use PDOException;
class MySql
{
protected $db;
protected $dbChar;
protected $dbHost;
protected $dbName;
protected $dbOpts = [];
protected $dbPass;
protected $dbPort;
protected $dbUser;
protected $dsn;
public function __construct( array $params )
{
list(
'dbChar' => $this->dbChar,
'dbHost' => $this->dbHost,
'dbName' => $this->dbName,
'dbOpts' => $this->dbOpts,
'dbPass' => $this->dbPass,
'dbPort' => $this->dbPort,
'dbUser' => $this->dbUser
) = $params;
$this->dsn = "mysql:";
$this->dsn .= "host=$this->dbHost;";
$this->dsn .= "dbname=$this->dbName;";
if ( ! empty( $this->dbPort ) )
{
$this->dsn .= "port=$this->dbPort;";
}
else
{
$this->dsn .= "port:3306;";
}
if ( ! empty( $this->dbChar ) )
{
$this->dsn .= "charset=$this->dbChar;";
}
}
public function connect()
{
try
{
$this->db = new PDO( $this->dsn, $this->dbUser, $this->dbPass, $this->dbOpts );
if ( isset( $this->db ) )
{
return $this->db;
}
return false;
}
catch ( PDOException $e )
{
return $e->getMessage();
}
}
}
When constructed, you need to pass an array $params
, for example:
$params = [
'dbChar' => 'utf8',
'dbHost' => 'localhost',
'dbName' => 'mysqldbname',
'dbOpts' => [
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ,
PDO::ATTR_EMULATE_PREPARES => false,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_TIMEOUT => 30
],
'dbPass' => 'mysqldbpass',
'dbPort' => '3306',
'dbUser' => 'mysqldbuser'
];
Note: You’ll need to change mysqldbname
, mysqldbpass
, and mysqldbuser
to match yours.
So to create an instance of this MySql
class, I’d use:
$db = new MySql( $params );
To connect, I’d then use:
$dbc = $db->connect();
Now I can run:
$vars = [
':id' => 1
];
$query = $dbc->prepare('SELECT * FROM tableName WHERE id = :id LIMIT 1');
$query->execute( $vars );
$results = $query->fetchAll();
var_dump( $results );
And that should dump the results from my query.
I just tested this locally and on a Droplet with PHP 7.x and 7.1 and it works, so if you run in to issues with the above, then there most likely is an issue with PDO not working. If that works, then the issue would be in your code.