繁体   English   中英

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

[英]Connecting to an Amazon RDS via an EC2 Instance with PHP PDO (Error 500)

我正在尝试通过EC2实例中的PDO连接到我的MySQL RDS实例。 但是,控制台(在所有浏览器上)显示“状态500”错误。 这是我的代码(checkit.php),摘自他们的教程

<?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); (其他涉及$dbh删除了错误500警告,因此我知道这与PDO语句有关。

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

  • 绝对已安装PHP:bash php --version和5.6.17打印。
  • PDO已预先安装在此版本的PHP中(我相信,但我尚未对此进行测试)
  • 我可以通过SSH连接到数据库,这意味着
    • 凭据正确
    • 安全组设置正确

上面的PHP代码使用了AJAX:

$('#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>

导航到http://<ip address>/checkit.php返回错误500状态,因此我怀疑与AJAX无关,但是尽管如此,我还是发布了代码以防万一。

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

这是由于PDO使用与RDS服务器不同的连接方法,默认情况下系统中不允许这样做。 运行以下命令可以解决此问题:

setsebool -P httpd_can_network_connect=1

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

顺便说一下,您不能授予GRANT ALL PRIVILEGES ON * . * TO 'dbuser'@'111.11.111.11';授予GRANT ALL PRIVILEGES ON * . * TO 'dbuser'@'111.11.111.11'; 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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM