当我在 PHPMyAdmin 中运行这个查询时
SELECT * FROM tbl_events WHERE start_datetime > CURDATE() ORDER BY start_datetime ASC;
我得到了这个结果
2019-08-19 07:30:00
2020-03-21 06:30:00
2020-04-30 07:30:00
2020-07-30 07:30:00
虽然当我在我的网站上运行查询时,返回的顺序是行写入表的顺序。
2020-07-30 07:30:00
2020-05-02 07:30:00
2020-04-30 07:30:00
2020-03-21 06:30:00
2019-08-19 07:30:00
原始 PHP:
$search = "%" . $search . "%";
echo "The sort type is: " . $sortType . "<br>";
// fetch events
$stmt = $this->conn->prepare("SELECT * FROM tbl_events WHERE LOWER(event_name) LIKE LOWER(?) AND start_datetime > CURDATE() ORDER BY ? ASC;");
$stmt->bind_param("ss", $search, $sortType);
$stmt->execute();
$eventResult = $stmt->get_result();
if (isset($stmt->errno)) {
if ($stmt->errno != 0) {
echo "An error occured! Error Number: " . $stmt->errno . "<br> Error message: " . $stmt->error;
}
}
$stmt->close();
最佳答案
?
绑定(bind)占位符位于 SQL 语句中的 value 位置。它不是标识符。当绑定(bind)一个值并执行语句时,问号将替换为一个值。
结果就好像我们这样做了:
SELECT e.*
FROM tbl_events e
WHERE e.start_datetime > CURDATE()
ORDER BY 'start_datetime' ASC;
^ ^
注意单引号。那是一个字符串文字,一个值。不是对列的引用。无论我们传入什么值,每一行都将相同。
要根据传入的值在列上进行排序,我们可以这样做:
ORDER
BY CASE ?
WHEN 'start_datetime' THEN e.start_datetime
WHEN 'something_else' THEN someothervalidexpression
END
ASC
关于php - MySQL ORDER BY Datetime 适用于 PHPMyAdmin 但不适用于 PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55284490/