它的工作原理,但我不覺得它是我的問題的最佳解決方案。 我想讓我的代碼做的是檢查位置是否爲1,併發送所有位置的消息。有條件的準備語句PHP mysqli,減少
function getCurrentMessage($location){
$conn = Connection::getConnection();
if($location == 1) {
$query = "SELECT first_name, last_name, description, title, message ,font_size , effective_date
FROM tbl_messages
JOIN tbl_authors ON tbl_authors.id_author = tbl_messages.id_author
JOIN tbl_locations ON tbl_messages.id_location = tbl_locations.id_location
AND effective_date <= CURDATE()
ORDER BY effective_date desc
LIMIT 2;";
$result = array();
if ($stmt = $conn->prepare($query)) {
$stmt->bind_result($first_name, $last_name, $location, $title, $message, $size, $date);
$stmt->execute();
while ($stmt->fetch()) {
$message = new Message($first_name, $last_name, $location, $title, $message, $size, $date);
array_push($result, $message);
}
}
}
else{
$query = "SELECT first_name, last_name, description, title, message ,font_size , effective_date
FROM tbl_messages
JOIN tbl_authors ON tbl_authors.id_author = tbl_messages.id_author
JOIN tbl_locations ON tbl_messages.id_location = tbl_locations.id_location
WHERE tbl_messages.id_location = ?
AND effective_date <= CURDATE()
ORDER BY effective_date desc
LIMIT 2;";
$result = array();
if ($stmt = $conn->prepare($query)) {
$stmt->bind_result($first_name, $last_name, $location, $title, $message, $size, $date);
$stmt->bind_param('i', $location);
$stmt->execute();
while ($stmt->fetch()) {
$m = new Message($first_name, $last_name, $location, $title, $message, $size, $date);
array_push($result, $m);
}
}
}
return $result;
}
也許我可以把一些邏輯放在SQL語句中。 如果您有任何見解,請幫助。
您可以在函數的開頭刪除位置檢查。這將有助於只允許使用一個查詢。這裏有一個where子句,它將從函數中的參數中獲取位置,例如'WHERE location =?' – Akintunde007
[code review](https://codereview.stackexchange.com/)將是最好的地方 –