note 116536 deleted from book.pdo by sobak

From: Date: Fri, 02 Dec 2016 03:57:47 +0000
Subject: note 116536 deleted from book.pdo by sobak
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-207927@lists.php.net to get a copy of this message
Note Submitter: Padre Cedano ---- Hola, Sólo quiero señalar que cuando usamos la clase PDO, si hay un error, en el log se mostrará la contraseña de nuestra base de datos, lo cual sería bastante peligroso, porque la misma queda expuesta. Investigando he encontrado una clase llamada "SafePDO" que impide esto: //http://www.deiverbum.org/SafePDO.txt <?php /* --http://php.net/manual/en/pdo.connections.php // Connect to the database with defined constants $dbh = new SafePDO(PDO_DSN, PDO_USER, PDO_PASSWORD); */ Class SafePDO extends PDO { public static function exception_handler($exception) { // Output the exception details die('Uncaught exception: '. $exception->getMessage()); } public function __construct($dsn, $username='', $password='', $driver_options=array()) { // Temporarily change the PHP exception handler while we . . . set_exception_handler(array(__CLASS__, 'exception_handler')); // . . . create a PDO object parent::__construct($dsn, $username, $password, $driver_options); // Change the exception handler back to whatever it was before restore_exception_handler(); } } ?> Para usarla hay que crear un archivo PHP llamado por ejemplo SafePDO con el contenido del archivo citado más arriba. Y en cuando tengamos que conectar a nuestra base de datos: <?php include_once('SafePDO.php' ); $dsn = 'mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset=utf8'; $opt = array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8' ); $pdo = new SafePDO($dsn,DB_USER,DB_PASSWORD); ?>

« previous php.notes (#207927) next »