【发布时间】:2016-10-19 11:21:32
【问题描述】:
我的问题如下... 我做了一些从 mysql 数据库中读取记录的 php 代码:
$host = $_SESSION['host'];
$username = $_SESSION['username'];
$password = $_SESSION['password'];
$db = $_SESSION['db'];
$con = mysqli_connect($host,$username,$password,$db);
$sql = "SELECT * FROM `table`";
$result = $con->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
...
}
}
我的html:
<button onclick="list">submit</button>
<div id="output"></div>
<script>
var thisHost = "host.php";
function list() {
$.ajax({
type: 'POST',
url: thisHost,
data: "list=true",
success: function(data)
{
$("#output").html(data);
},
error: function (responseData, textStatus, errorThrown)
{
console.warn(responseData, textStatus, errorThrown);
}
});
}
</script>
只要一切正常。但是现在我想从另一台主机调用 php 代码。因此 html 文件位于另一台主机 (localhost:81) 上,而 php 文件位于旧主机 (localhost:80) 上。
现在我注意到我需要一些东西来跨越域,因为 ajax 似乎不适用于其他主机。所以我所做的只是在开始时将这些行添加到 php 代码中:
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, GET, OPTIONS');
header('Access-Control-Max-Age: 1000');
header('Access-Control-Allow-Headers: Content-Type');
并将javascript中thisHost var的值更改为
"http://localhost:80/host.php"
之后,ajax 部分再次工作并且 php 响应。但是,每次我想通过执行以下操作进行查询时:
$sql = "SELECT * FROM `table`";
我会得到这个错误:
致命错误:未捕获的错误:在 null 上调用成员函数 query() 在 C:\path\to\host.php:71 堆栈跟踪:#0 {main} 抛出 C:\path\to\host.php 在第 71 行
我很确定查询是正确的。那么我需要改变什么?
【问题讨论】:
-
您在创建连接时没有检查错误,它是
null。这里的 JavaScript 代码完全无关紧要。 -
我明白了。问题的原因是我用来保持连接的会话。如果我有不同的主机,我没有检查会话是否不起作用:/ 谢谢!
-
像这样在
$_SESSION中存储凭据是自找麻烦。希望有更好的方法。 -
@stackEr 正如 tadman 所说,您不希望在 $_SESSION 变量中添加信用。将它们放在公共无法访问的文件中,并在需要连接时参考它。如果你不能,我想知道你的网站什么时候上线,因为我需要练习我的黑客技术;)
标签: javascript php mysql ajax cross-domain