我尝试通过我的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语句有关。
我已经搜索过一段时间了,似乎与此重复的问题对我没有帮助:
$dbh
和5.6.17打印。上面的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有什么关系,但我发布了代码以防万一。
关于从哪里开始的任何想法?
答案 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';
所有特权:SELECT
,INSERT
,DELETE
,UPDATE
,ALTER
,CREATE
refs:https://www.technlg.net/aws/create-mysql-user-aws-rds/,https://stackoverflow.com/a/46589327/8255365