Я пытаюсь подключиться к своему экземпляру 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 --version
и 5.6.17 отпечатков.Вышеуказанный 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';
как это. Это дает 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