使用PHP PDO通过EC2实例连接到Amazon RDS(错误500)

时间:2016-01-26 09:04:48

标签: php amazon-web-services pdo amazon-ec2 amazon-rds

我尝试通过我的EC2实例中的PDO连接到我的MySQL RDS实例。但是,控制台(在所有浏览器上)显示的状态为500'错误。这是我的代码(checkit.php),取自their tutorial

mycss.css

删除行<?php $error = 0; try { $dbhost = $_SERVER['RDS_HOSTNAME']; $dbport = $_SERVER['RDS_PORT']; $dbname = $_SERVER['RDS_DB_NAME']; $dsn = "mysql:host={$dbhost};port={$dbport};dbname={$dbname}"; $username = $_SERVER['RDS_USERNAME']; $password = $_SERVER['RDS_PASSWORD']; $dbh = new PDO($dsn, $username, $password); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); } catch (Exception $e){$error = $e->getMessage();} echo $error; ?> (以及涉及$dbh = new PDO($dsn, $username, $password);的其他行会删除错误500警告,因此我知道它与PDO语句有关。

我已经搜索过一段时间了,似乎与此重复的问题对我没有帮助:

  • 确实安装了PHP:bash $dbh和5.6.17打印。
  • PDO预装在这个版本的PHP中(我相信但我没有测试过这个)
  • 我可以SSH连接数据库意味着
    • 凭据正确
    • 安全组已正确设置

上面的PHP代码是AJAX&#39;使用它:

php --version

这个表格(简化):

$('#user').on('submit', function(e) {
  e.preventDefault();
  $.ajax({
    url: "checkit.php",
    type: "POST",
    data: $(this).serialize(),
    success: function(data) {
      errors = data;
    }
  });
});

导航到<form id="user" action="" method="POST" target="_self" autocomplete="on" novalidate> <input name="create" type="checkbox"> <button type="sumbit" name="submit">Submit</button> </form> 会返回错误500状态,所以我怀疑它与AJAX有什么关系,但我发布了代码以防万一。

关于从哪里开始的任何想法?

2 个答案:

答案 0 :(得分:1)

这是因为PDO使用与RDS服务器不同的连接方法,默认情况下系统不允许这样做。运行以下应修复它:

setsebool -P httpd_can_network_connect=1

答案 1 :(得分:0)

PDO实际上存在一些问题。我在数据库中创建了一个新用户,并拥有所有特权。使用这些登录凭据后,我就可以连接到数据库了。

通过这种方式,您无法享有所有特权   GRANT ALL PRIVILEGES ON * . * TO 'dbuser'@'111.11.111.11';这样。它赋予ERROR 1045 (28000): Access denied for user 'dbadmin'@'%' (using password: YES)而不是像这样的权限:

GRANT SELECT ON * . * TO 'dbuser'@'111.11.111.11';

所有特权:SELECTINSERTDELETEUPDATEALTERCREATE

refs:https://www.technlg.net/aws/create-mysql-user-aws-rds/https://stackoverflow.com/a/46589327/8255365