从外部服务器使用Javascript连接到PHP MySQL
好的,问题出在这里。我有以下PHP代码从外部服务器使用Javascript连接到PHP MySQL,php,javascript,html,Php,Javascript,Html,好的,问题出在这里。我有以下PHP代码 <?php $con=mysqli_connect("example.com","peter","abc123","my_db"); // Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $result = mysqli_query($con,"SELECT
<?php
$con=mysqli_connect("example.com","peter","abc123","my_db");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$result = mysqli_query($con,"SELECT * FROM Persons");
echo "<table border='1'>
<tr>
<th>Firstname</th>
<th>Lastname</th>
</tr>";
while($row = mysqli_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row['FirstName'] . "</td>";
echo "<td>" . $row['LastName'] . "</td>";
echo "</tr>";
}
echo "</table>";
mysqli_close($con);
?>
上面的javascript可以工作,但只有在数据库所在的服务器上才能工作。我需要的是让Javascript在另一个位置工作,而PHP仍然可以存储在主服务器上。您需要发出跨域请求(其中一些)您需要发出跨域请求(其中一些)尝试使用$.ajax发出跨域请求,如下所示:
$.ajax({
type: "GET",
crossDomain:true,
url: "phpscripthere.com/myphp.php"
});
尝试使用跨域true的$.ajax发出请求,如下所示:
$.ajax({
type: "GET",
crossDomain:true,
url: "phpscripthere.com/myphp.php"
});
请不要将此标记为答案,因为它不是 但这与我们的建议相当 这是病毒的传播
$con=mysqli_connect("example.com","peter","abc123","my_db");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
在此脚本中,即使连接失败,处理仍将继续
您应该包括更多的故障检查,并按如下方式退出:
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
exit(0);
}
你也不知道
$result = mysqli_query($con,"SELECT * FROM Persons");
查询成功
除了这些陷阱
您最好为页面收集数据,并将其编码为JSON并发送到客户端。。详情如下:
$r = array();
while(true){
$row = mysqli_fetch_array($result);
if(!$row)break;
$r[] = json_encode((object)$row);
}
echo json_encode($r);
forming [ {"firstName":"John", "lastName": "Smith"},
{"firstName":"Abraham", "lastName":"Lincoln"}, ...etc ]
then upon receiving decode the data in js and inject to your page.
当然,使用ajax跨域请求(不太安全)或让您的服务器与其他服务器对话(更安全)来解决您的问题。请不要将此标记为答案,因为它不是 但这与我们的建议相当 这是病毒的传播
$con=mysqli_connect("example.com","peter","abc123","my_db");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
在此脚本中,即使连接失败,处理仍将继续
您应该包括更多的故障检查,并按如下方式退出:
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
exit(0);
}
你也不知道
$result = mysqli_query($con,"SELECT * FROM Persons");
查询成功
除了这些陷阱
您最好为页面收集数据,并将其编码为JSON并发送到客户端。。详情如下:
$r = array();
while(true){
$row = mysqli_fetch_array($result);
if(!$row)break;
$r[] = json_encode((object)$row);
}
echo json_encode($r);
forming [ {"firstName":"John", "lastName": "Smith"},
{"firstName":"Abraham", "lastName":"Lincoln"}, ...etc ]
then upon receiving decode the data in js and inject to your page.
当然,使用ajax跨域请求(不太安全)或让您的服务器与其他服务器对话(更安全)来解决您的问题。如果您是从W3Schools学习这方面的知识,听起来可能有点复杂,但不要泄气:) 无论如何,正如@LoneWOLFs在一篇评论中所说,您可能还可以在JavaScript来自的同一台服务器上设置另一个PHP页面,并在另一台远程服务器上进行该页面调用
基本上,您的新PHP脚本将执行与旧脚本类似的操作—从某个远程位置调用一些数据。然后它会将数据传回调用它的浏览器。如果你是从W3Schools学习这些东西,听起来可能有点复杂,但不要气馁:) 无论如何,正如@LoneWOLFs在一篇评论中所说,您可能还可以在JavaScript来自的同一台服务器上设置另一个PHP页面,并在另一台远程服务器上进行该页面调用
基本上,您的新PHP脚本将执行与旧的一个类似的操作——从一些远程位置调用一些数据。然后它会将数据传回调用它的浏览器。Javascript有一个跨域策略,阻止请求进入其他域。您需要启用CORS或使用JSONP来实现此功能。供参考,您也可以使用ajax在服务器上调用一个页面,该页面通过使用CURL获取远程页面。这里应该注意,使用JSONP时会失去安全性,即没有post,因此所有发布的数据都将向用户、中间的所有路由器和web服务器公开,Javascript有一个跨域策略,阻止向其他域发送请求。您需要启用CORS或使用JSONP来实现此功能。供参考,您也可以使用ajax在服务器上调用一个页面,该页面通过使用CURL获取远程页面。这里应该注意,使用JSONP时会失去安全性,即没有post,因此所有发布的数据都将向用户、中间的所有路由器和web服务器公开,他们每个人都在记录信息。教人们正确的东西很好,但这应该是一个答案还是一个评论?等等,剩下的就来了。我不是在追求销售代表,我开始一次又一次地遇到同样的事情。谢谢你的建议。我知道W3Schools只不过是他们的老师,而不一定是他们的老师来提供最佳实践。@Ihsan等一下。我有点迷路了。那么让我看看我是否可以发布一个我从你那里得到的示例,看看我是否理解你;while(true){$row=mysqli_fetch_数组($result);if(!$row)break;$r[]=json_encode(object($row));}echo json_encode($r);形成[{“firstName”:$row['firstName'],“lastName”:$row['lastName']}]我发布的内容与您相同,但我用变量替换了John,用变量替换了Smith。我也很可能会给它添加一个循环,因为数据库总是在变化。教人们正确的东西很好,但这应该是一个答案还是一个评论?等等,剩下的就来了。我不是在追求销售代表,我开始一次又一次地遇到同样的事情。谢谢你的建议。我知道W3Schools只不过是他们的老师,而不一定是他们的老师来提供最佳实践。@Ihsan等一下。我有点迷路了。那么让我看看我是否可以发布一个我从你那里得到的示例,看看我是否理解你;while(true){$row=mysqli_fetch_数组($result);if(!$row)break;$r[]=json_encode(object($row));}echo json_encode($r);形成[{“firstName”:$row['firstName'],“lastName”:$row['lastName']}]我发布的内容与您相同,但我用变量替换了John,用变量替换了Smith。我也很可能会给它添加一个循环,因为数据库总是在变化的。它看起来很像Javascript。然而,我还有一些其他问题,AJAX应该在中还是应该被引用?如果它在一个单独的文件中,我应该给AJAX什么扩展名。JS?您可以在中调用上述ajax方法,也可以在*code here*部分中调用其他部分