【发布时间】:2017-03-30 17:23:41
【问题描述】:
我在我的网站空间上运行了一个用于安卓应用程序的脚本。虽然,它似乎不起作用。在某些网站空间上,当我尝试访问它时会得到一个空白站点,而在其他网站上,我会收到 500 内部服务器错误。虽然这个脚本应该可以正常工作,因为它曾经这样做过。
它应该从一个表中获取所有信息并在一些 INNER JOIN 之后回显它。即使在进行了一些 mysqli_error 检查和一些回显检查变量等之后,我也无法跟踪错误。
变量 $con 确实存在,连接应该可以正常工作。我只是因为堆栈溢出删除了它^^。
<?php
$subId = 1;
$sql = "SELECT articles.a_id, sciences.science, articles.title, articles.content, login.username, articles.date, articles.viewed, articles.timestamp FROM articles
INNER JOIN sciences ON articles.s_id = sciences.s_id
INNER JOIN login ON articles.author = login.id
WHERE articles.s_id = ".$subId."
ORDER BY timestamp DESC";
if (!$res = mysqli_query($con,$sql)) {
echo "FAIL";
echo mysqli_error($con);
}
else {
$result = array();
while($row = mysqli_fetch_array($res)){
array_push($result,
array('a_id'=>$row[0],
'science'=>$row[1],
'title'=>$row[2],
'content'=>$row[3],
'author'=>$row[4],
'date'=>$row[5],
'viewed'=>$row[6],
'timestamp'=>$row[7]
));
}
echo json_encode(array("result"=>$result));
}
mysqli_close($con);
?>
编辑:我更新了我的代码:
<?php
$subId = 1;
$con = mysqli_connect("HOST", "USER", "PASSWORD", "DATABASE");
if (!$con)
{
echo "Cant't connect to MySQL.<br>";
echo "Debug: " . mysqli_connect_errno()
}
$sql = "SELECT articles.a_id, sciences.science, articles.title, articles.content, login.username, articles.date, articles.viewed, articles.timestamp FROM articles
INNER JOIN sciences ON articles.s_id = sciences.s_id
INNER JOIN login ON articles.author = login.id
WHERE articles.s_id = ".$subId."
ORDER BY timestamp DESC";
if (!$res = $con->query($sql))
{
echo "FAIL";
}
else
{
$result = array();
while($row = $con->fetchArray($res))
{
array_push($result); //use the query to rename fields, if needed
}
echo json_encode(array("result"=>$result));
}
?>
【问题讨论】:
-
为什么不直接获取关联数组而不是编号数组并进行转换?如果您需要重命名列,您甚至可以在 select 语句中执行此操作。
-
您检查过错误日志吗?他们可以提供一些有用/重要的信息。这将是我要检查的地方,尤其是在大多数情况下您没有收到错误的情况下。还有你的环境vps、共享主机等是什么?
-
从技术上讲,这不是 alex,因为他没有将任何外部数据放入查询中。 $subid 似乎总是被定义为 1。另外,他正在使用 mysqli...
-
如果
$subId来自实际代码中的外部源,这可能是 500 错误的原因。要回答这个问题,需要更多背景信息。