我的代码在localhost上运行良好,但是当加载到remove服务器上时,它的行为有所不同-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";
最佳答案
原因是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/