2013-04-28 168 views
2

我想连接到我的NearlyFreeSpeech MySQL数据库。我可以通过PHPMyAdmin登录,但不能通过PDO登录。我正在使用此代码PDO连接到MySQL数据库拒绝

$dbconn = new PDO('mysql:host=127.0.0.1;dbname='.$config['db'].'; port=3307', $config['user'], $config['pass']); 

其中$ config是在单独的文件中定义的。我得到的错误是:

Warning: PDO::__construct() [pdo.--construct]: [2002] Connection refused (trying to connect via tcp://127.0.0.1:3307) 
Error: SQLSTATE[HY000] [2002] Connection refused 

,然后最终

Fatal error: Call to a member function query() on a non-object in... 

如果我使用

mysql:host=localhost 

我得到的是

Error: SQLSTATE[HY000] [2002] No such file or directory 

错误现在假设“连接拒绝“比”没有这样的文件或目录“更好ectory“,但我不知道该从哪里出发。任何想法为什么发生这种情况?感谢您的帮助。

+0

它似乎不正确 - 在新的PDO调用提到端口3307 DSN但错误消息已连接拒绝端口3306 - 这是它? – pilsetnieks 2013-04-28 21:05:30

+0

对不起,这是因为我复制并粘贴了不同的东西。但我已经尝试了两种方式,改变端口没有任何区别。 – george 2013-04-28 21:27:34

+4

任何你试图3307的原因? – 2013-04-28 21:28:51

回答

1

尝试我现有的函数和常量变量,您也可以将这些常量改为您拥有的数组变量。

define("SERVER_SQL_VERSION","mysql"); 
define("SQL_SERVER","localhost"); 
define("SQL_PORT","3306"); 
define("SQL_USERNAME","root"); 
define("SQL_PASSWORD",""); 
define("SQL_DB_NAME","db"); 

if(!function_exists('pdoConnect')) { 
    function pdoConnect() { 
     $pdo = new PDO(SERVER_SQL_VERSION.":host=".SQL_SERVER.";dbname=".SQL_DB_NAME."", "".SQL_USERNAME."", "".SQL_PASSWORD.""); 
     $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
     return $pdo; 
    } 
} 

有可能是你的级联的问题,这一点必须工作......

我也分隔的SERVER_SQL_VERSION,并增加了一个功能,以检查驱动程序是否可用...我使用XAMPP软件并且只有mysql和sqlite处于活动状态,如果您/其他人尝试使用postgresql等等,那也必须正常工作。

if(!function_exists('check_sql_version')) { 
    function check_sql_version() { 
     $sql_available = false;  //make it false yet 
     foreach(PDO::getAvailableDrivers() as $key => $val) { 
      if(SERVER_SQL_VERSION == $val) 
      { 
       $sql_available = true; 
      } 
     } 
     //check now if sql_available is true or false 
     if($sql_available == true) 
      return true; 
     else 
      return false; 
    } 
} 

因此样本应考虑:

if(!check_sql_version()) { 
    echo '('.SERVER_SQL_VERSION.') is not available, you only have this drivers:<br/>'; 
    foreach(PDO::getAvailableDrivers() as $key => $val) { 
     $key = $key + 1; 
     echo $key.') '.$val.'<br/>'; 
    } 
    exit(); //exit and dont proceed 
} 
$stmt = pdoConnect()->prepare("SELECT * FROM accounts"); 
$stmt->execute(); 

我希望它能帮助!