2016-01-14 65 views
0

我想使用PDO連接到我的數據庫,但我無法得到它的工作。我得到一個500服務器錯誤mysql_connect()工程PDO不

MySQL版本5.0.83

'PDOException' with message 'SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: nodename nor servname provided, or not known' inerror: Fatal error: Uncaught exception

其他錯誤,我得到:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2002] Operation timed out'

我在這個例子中改變了價值明顯。是的,他們是正確的憑據。我可以連接Sequel Pro或其他方法。

connection.php:

<?php 

//Our MySQL user account. 
define('MYSQL_USER', 'user'); 

//Our MySQL password. 
define('MYSQL_PASSWORD', 'pass'); 

//The server that MySQL is located on. 
define('MYSQL_HOST', 'host'); 

//The name of our database. 
define('MYSQL_DATABASE', 'database'); 

/** 
* PDO options/configuration details. 
* I'm going to set the error mode to "Exceptions". 
* I'm also going to turn off emulated prepared statements. 
*/ 
$pdoOptions = array(
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 
    PDO::ATTR_EMULATE_PREPARES => false 
); 

/** 
* Connect to MySQL and instantiate the PDO object. 
*/ 
$pdo = new PDO(
    "mysql:host=" . MYSQL_HOST . ";dbname=" . MYSQL_DATABASE, //DSN 
    MYSQL_USER, //Username 
    MYSQL_PASSWORD, //Password 
    $pdoOptions //Options 
); 

registration.php的

<?php 

require 'connection.php'; 

奇怪的是,這個網站的mysql_connect的舊頁()被使用。

$db = mysql_connect($hostname, $db_user, $db_password); mysql_select_db($database,$db);

這與完全相同的憑據完美。

它託管在共享主機上,並且服務器上啓用了PDO。 共享主機:Blacknight

我想:

  • 不使用$ pdoOptions
  • 不使用define()
  • 不使用要求,並把新的PDO碼直入和registration.php文件
  • 在答案中運行腳本,現在我的mysql_connect()執行超時並在我的主機上收到一個白屏。

now: Fri, 15 Jan 2016 08:54:21 +0100 last changed:Fri, 15 Jan 2016 08:53:01 +0100 Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in connection.php on line 14

Warning: mysql_connect(): Operation timed out in connectie.php on line 14 connection failed. Operation timed out

+2

您是否使用確切(!)相同的定義爲您的mysql_ *和PDO代碼? – VolkerK

+1

另一種可能性是:主機完全錯誤,並且'mysql_connect'出於同樣的原因失敗,但是實際上並沒有檢查它,並且在調用後續的'mysql_'函數時,它們會執行其隱含的幕後操作,猜猜發生了什麼工作。 – deceze

+0

我們將很難幫助您在這裏,而不知道主機應該是什麼,它的實際是什麼,也許有關於您的DNS解析器的東西。 – deceze

回答

0

它似乎是主機。我把一個完全相同的腳本放在不同的共享主機上:'Combell',我在那個主機上創建了一個數據庫,我改變了憑據,腳本就像一個魅力一樣。所以問題是'Blacknight'。感謝大家的幫助。

2

你說使用mysql_ *功能可以建立連接,還與他的PDO連接失敗完全相同的參數。
它失敗SQLSTATE[HY000] [2002] php_network_getaddresses ....

因此,「答案」部分濫用再次,我希望你能運行以下腳本(僅調整定義),它會嘗試這兩個API。
它還會顯示腳本的filemtime;不會是第一次共享主機上的一些緩存問題引起的麻煩;-)

<?php 
error_reporting(E_ALL|E_STRICT); 
ini_set('display_errors', true); 
// for testing purposes keep everything in one file 
define('MYSQL_USER', 'localonly'); 
define('MYSQL_PASSWORD', 'localonly'); 
define('MYSQL_HOST', 'localhost'); 
define('MYSQL_DATABASE', 'test'); 

echo 'now: ', date('r'), ' last changed:', date('r', filemtime(__FILE__)); 


$db = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD); 
if (!$db) { 
    die('connect failed. '.mysql_error()); 
} 
if (!mysql_select_db(MYSQL_DATABASE, $db)) { 
    die('select_db failed. '.mysql_error($db)); 
} 
echo 'mysql: ', mysql_get_server_info($db), "<br />\r\n"; 


$pdoOptions = array(
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 
    PDO::ATTR_EMULATE_PREPARES => false 
); 

try { 
    $dsn = "mysql:host=" . MYSQL_HOST . ";dbname=" . MYSQL_DATABASE; 

    $pdo = new PDO(
     $dsn, 
     MYSQL_USER, //Username 
     MYSQL_PASSWORD, //Password 
     $pdoOptions //Options 
    ); 
    echo 'pdo: ', $pdo->getAttribute(PDO::ATTR_SERVER_INFO), "<br />\r\n"; 
} 
catch(Exception $ex) { 
    echo 'PDO failed.', $ex->getMessage(); 
    var_dump($dsn); 
    die; 
} 

是否mysql_ *腳本的一部分得到執行(打印服務器版本),而PDO部分再次失敗?

+0

噢,當你在它的時候:_If_如果PDO部分失敗,也請嘗試用'define('MYSQL_HOST','172.16.4.101');'。 – VolkerK

+0

感謝您的回覆,我在問題的底部添加了錯誤。 – Christophvh

+0

因此,mysql_ *函數也無法連接到MySQL服務器。根據這個[幫助臺條目](https://help.blacknight.com/entries/25026266-Where-do-i-find-my-MySQL-Database-details-),有一種叫做「內部主機名」的東西 - 你用這個? – VolkerK