我正在尝试使用PDO连接到我的数据库,但我无法使其正常工作。我收到500服务器错误
MySQL版本5.0.83
带有消息'SQLSTATE [HY000] [2002]的'PDOException' php_network_getaddresses:getaddrinfo failed:nodename也没有servname 提供或未知'inerror:致命错误:未捕获异常
我得到的其他错误:
致命错误:带有消息的未捕获异常'PDOException' 'SQLSTATE [HY000] [2002]操作超时'
我明显改变了这个例子中的值。是的,他们是正确的凭据。我可以使用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($数据库,$分贝);
这与完全相同的凭据完美无缺。
它托管在共享主机上,并且在服务器上启用了PDO。 共享主机:黑夜
我试过了:
now:Fri,2016年1月15日08:54:21 +0100最后更改时间:2016年1月15日星期五 08:53:01 +0100不推荐使用:mysql_connect():mysql扩展名为 已弃用并将在以后删除:使用mysqli或PDO 而是在第14行的connection.php中
警告:mysql_connect():联机中的connectie.php操作超时 14连接失败。操作超时
答案 0 :(得分: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;
}
当PDO部分再次失败时,脚本的mysql_ *部分是否会被执行(打印服务器版本)?
答案 1 :(得分:0)
它似乎是托管。我将完全相同的脚本放在不同的共享主机上:&#39; Combell&#39; ,我在该主机上创建了一个数据库,我更改了凭据,脚本就像一个魅力。所以问题是“黑夜”。感谢大家的帮助。