Example #1
0
 /**
  * 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");
 }