Подключение к Amazon RDS через экземпляр EC2 с PHP PDO (ошибка 500)

Я пытаюсь подключиться к своему экземпляру MySQL RDS через PDO из моего экземпляра EC2. Однако консоль (во всех браузерах) выдает ошибку «status 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, но, тем не менее, я разместил код на всякий случай.

Есть идеи, с чего начать?

0

Решение

Это связано с тем, что PDO использует другой метод подключения к серверу RDS, который по умолчанию не разрешен в системе. Запуск следующего должен исправить это:

setsebool -P httpd_can_network_connect=1
1

Другие решения

На самом деле есть некоторая проблема с 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';

для всех привилегий: SELECT, INSERT, DELETE, UPDATE, ALTER, CREATE

ссылки: https://www.technlg.net/aws/create-mysql-user-aws-rds/, https://stackoverflow.com/a/46589327/8255365

0

По вопросам рекламы [email protected]