首页 > 解决方案 > 这个 php / mysql 在 localhost 和远程服务器上的行为有什么不同吗?

问题描述

我的代码在 localhost 上运行良好,但是当加载到删除服务器上时,它的行为有所不同 - localhost 上的 id 显示为应有的(见图) - id 是有序的。

在此处输入图像描述

然而,在远程服务器上它不是,但代码是相同的!!

在此处输入图像描述

我试过在远程服务器上的 myphpadmin 中只运行 sql 查询,这很好。

$con = mysqli_connect("localhost", "******", "******", "ps10");

if (mysqli_connect_errno()) {
    echo "Failed to connect to MySQL: ".mysqli_connect_error();
}

if ($_POST['selClass'] == 'All records' OR $_SESSION['selClass'] == 'All records') {
    $query_rs4 = "SELECT * 
                  FROM  marker
                  INNER JOIN users ON marker.class = users.class";
} else {
    if (empty($_POST['selClass']) && empty($_SESSION['selClass'])) {
        $query_rs4 = "SELECT * 
                      FROM  marker
                      INNER JOIN users ON marker.class = users.class";
    } else {
        $query_rs4 = "SELECT * 
                      FROM  marker
                      INNER JOIN users ON marker.class = users.class
                      WHERE users.username='{$_SESSION['selClass']}'";
    }
}

$rs4 = mysqli_query($con, $query_rs4) or die(mysqli_error($con));
$row = mysqli_num_rows($rs4);

echo "There are ".$row." students in this class";

标签: phpmysql

解决方案


除了您没有向我们展示创建表的代码这一事实之外,该代码在两台机器中的功能不同,请记住这句话

SELECT * FROM tableA JOIN tableb

意味着由于两个表中可能存在同名的字段,因此您无法确定返回的是哪个字段。

例如,如果两个表都有一个 id 字段,使用该查询意味着你不知道你会得到 tableA.id 还是 tableB.id...

相反,如果你说:

select tableA.* from tableA join tableB

您将确定 id 字段将来自 tableA...

此外,如果您想要按 id 排序的结果,您应该明确添加 ORDER BY tableA.id 子句,否则服务器可以决定按照它喜欢的顺序为您提供记录,甚至每次您执行查询时都会给您不同的记录。 ..


推荐阅读