Php 拒绝与MySQL数据库的PDO连接
我正在尝试连接到我的NearlyFreeSpeech MySQL数据库。我可以通过PHPMyAdmin登录,但不能通过PDO登录。我正在使用这个代码Php 拒绝与MySQL数据库的PDO连接,php,mysql,database,pdo,Php,Mysql,Database,Pdo,我正在尝试连接到我的NearlyFreeSpeech MySQL数据库。我可以通过PHPMyAdmin登录,但不能通过PDO登录。我正在使用这个代码 $dbconn = new PDO('mysql:host=127.0.0.1;dbname='.$config['db'].'; port=3307', $config['user'], $config['pass']); 其中$config在单独的文件中定义。我得到的错误是: Warning: PDO::__construct() [pdo
$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
现在我假设“拒绝连接”比“没有这样的文件或目录”好,但我不知道从这里该怎么办。知道为什么会这样吗?谢谢您的帮助。尝试我现有的函数和常量变量,您也可以将这些常量更改为现有的数组变量
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_版本,并添加了一个函数来检查驱动程序是否可用…我使用的是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();
if(!check\u sql\u version()){
echo“('.SERVER_SQL_VERSION.')不可用,您只有以下驱动程序:
;
foreach(PDO::getAvailableDrivers()作为$key=>$val){
$key=$key+1;
回显$key.'')。$val.
;
}
exit();//退出并不继续
}
$stmt=pdoConnect()->准备(“从帐户中选择*);
$stmt->execute();
我希望有帮助 它似乎不正确-在
new PDO
调用中的DSN提到端口3307,但错误消息连接拒绝端口3306-那么是哪一个?很抱歉,这是因为我复制并粘贴了不同的内容。但我已经尝试了这两种方法,更改端口也没什么区别。你为什么要尝试3307?因为它目前无法使用默认的3306,而且我在互联网上看到了一些关于使用3307的信息,所以我想试试。你确定MySQL和PHP在同一台服务器上运行吗?如果不是,则应指定“localhost”或“127.0.0.1”以外的内容。