MYSQL 2 PDO

Migrare da Mysql a PDO senza rifare tutto

L'estensione mysql per PHP sta per essere contrassegnata come deprecated.
Le alternative sono due: passare a mysqli oppure a PDO. Io ho scelto quest'ultima.

Mi serviva trovare un modo, il meno traumatico possibile, di convertire le mie query mysql in PDO.
Per questo ho scritto questa manciata di funzioni, che può essere estesa ma è sufficiente a ricoprire i miei bisogni, che sostituiscono le vecchie mysql_query, mysql_fetch_array etc.

function mysql_connect($host,$dbname,$user,$password)
{
try
{
$GLOBALS['__db']['pdo']=new PDO('mysql:host='.$host.';dbname='.$dbname , $user, $password);
$GLOBALS['__db']['pdo']->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$GLOBALS['__db']['pdo']->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

} catch(PDOException $e) {
// die if an error occurs
trigger_error('We are sorry, a database error occurred.', E_USER_ERROR);
return false;
}
return $GLOBALS['__db']['pdo'];
}

function mysql_real_escape_string($string)
{
$string=$GLOBALS['__db']['pdo']->quote($string);
$string=substr($string,1,-1);
return $string;
}

function mysql_query($query)
{
try
{
$results=$GLOBALS['__db']['pdo']->prepare($query);
$results->closeCursor();
$results->execute();

} catch(PDOException $e) {
// die if an error occurs
if(isset($_SESSION['iduser'])) trigger_error($e->errorInfo[2], E_USER_ERROR);
else trigger_error('We are sorry, a database error occurred.', E_USER_ERROR);
return false;
}

return $results;
}

function mysql_fetch_array($results)
{
return $results->fetch(PDO::FETCH_ASSOC);
}

function ksql_insert_id()
{
return $GLOBALS['__db']['pdo']->lastInsertId();
}

function mysql_close()
{
if(isset($GLOBALS['__db']['pdo'])) unset($GLOBALS['__db']['pdo']);
}

Mi è poi bastato includere queste funzioni nel file di connessione al db.