我的代码在localhost上运行良好,但是当加载到remove服务器上时,它的行为有所不同-localhost上的id按其应该的方式显示(参见图片)-id是有序的。
php - 有什么原因为什么这个php/mysql在localhost和远程服务器上的行为不同?-LMLPHP
但是,在远程服务器上它不是,但是代码是相同的!!
php - 有什么原因为什么这个php/mysql在localhost和远程服务器上的行为不同?-LMLPHP
我试过在远程服务器上只运行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";

最佳答案

原因是SQL查询返回多个名为id的列。
结果数组/散列只允许一个'id'元素,即$row['id']被分配一个值。
这两种环境之间的区别可能很简单

ALTER TABLE `somereferencedtable` ADD `id` INT UNSIGNED ;

这打破了密码。
解决方法是遵循最佳实践模式:
*中去掉lazy assSELECT,显式指定要返回的表达式,所有列引用都是完全限定的。如果有重复的列名,请提供别名。。。
SELECT users.id AS id, marker.id AS marker_id, user.class, marker.sub, ...
  FROM

这有助于未来的读者,不必查找哪些列来自哪些表。。。除了避免代码破坏之外,当有人在将来向表中添加列时,还会导致“不明确的列”错误,或无提示的错误行为(如问题中所示)。
此外,如果没有ORDER BY子句,MySQL可以按任意顺序返回行。

关于php - 有什么原因为什么这个php/mysql在localhost和远程服务器上的行为不同?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56380455/

10-11 13:41