/** * Connect to database. * * Also stores the newest PDO handle in the global `$pdo` variable. * */ function pdo_connect($server = NULL, $user = NULL, $pass = NULL, $new_link = FALSE, $client_flags = 0x0, $pconnect = 0x0) { // get params $server or $server = ini_get("mysql.default_host"); $user or $user = ini_get("mysql.default_user"); $pass or $pass = ini_get("mysql.default_password"); // prepare Data Source Name $dsn = "mysql:"; // servername contains a socket path if (strpos($server, "/")) { strpos($server, ":") and $server = substr($server, strpos($server, ":") + 1); $dsn .= "unix_socket={$server}"; } else { if (strpos($server, ":")) { list($server, $port) = explode($server, ":"); $dsn .= "host={$server};port={$port}"; } else { $dsn .= "host={$server}"; } } //("we don't have a dbname= at this point"); // driver flags $flags = array(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true); if ($client_flags & MYSQL_CLIENT_COMPRESS) { $flags[PDO::MYSQL_ATTR_COMPRESS] = 1; } if ($client_flags & MYSQL_CLIENT_SSL) { $flags[PDO::MYSQL_ATTR_SSL_KEY] = "client.pem"; $flags[PDO::MYSQL_ATTR_SSL_CERT] = "cert.pem"; $flags[PDO::MYSQL_ATTR_SSL_CA] = "ca.pem"; } if ($client_flags & MYSQL_CLIENT_IGNORE_SPACE) { $flags[PDO::MYSQL_ATTR_IGNORE_SPACE] = 1; } if ($client_flags & 128) { $flags[PDO::MYSQL_ATTR_LOCAL_INFILE] = 1; } if ($pconnect) { $flags[PDO::ATTR_PERSISTENT] = 1; } // instantiate connection try { $pdo = new PDO($dsn, $user, $pass, $flags); } catch (RuntimeException $pdo) { PDO_HELPFUL and pdo_trigger_error("pdo_connect() Failed. {$pdo->getMessage()}", E_USER_WARNING); return new pdo_dummy("Database connection had failed [ErrCode{$pdo->getCode()}]."); } // set PDO flags $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO_HELPFUL ? PDO::ERRMODE_WARNING : PDO::ERRMODE_SILENT); //or PDO::ERRMODE_EXCEPTION $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false); $pdo->setAttribute(PDO::ATTR_CASE, PDO::CASE_NATURAL); $pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true); // done return pdo_handle($pdo, "SET_HANDLE_AS_DEFAULT"); }