I have some SQL functions, an HTML/JS form and a PHP script (which calls SQL functions with form parameters). The form just sends two parameters :
If date is empty, no problem, I can get the date of the day by PHP and pass it to my SQL request. But when $language is empty, I want to display results for all languages..
The php part :
$date = isset($_GET['date']) ? $_GET['date'] : '';
if (empty($date)) {
$date = date("Y-m-d");
}
$language = isset($_GET['language']) ? $_GET['language'] : '';
if (empty($language)) {
$language = '%';
}
$events = retrieve_events_by_type ($DB, $query, $language, $date);
My SQL function :
function retrieve_events_by_type ($DB, $type, $language, $date) {
$req = $DB->prepare("SELECT organizer, eventname, eventplace, language, eventdate, eventhour, eventminutes FROM events where eventtype = ? AND language like ? AND eventdate = ?");
$req -> bindParam(1, $type, PDO::PARAM_STR);
$req -> bindParam(2, $language, PDO::PARAM_STR);
$req -> bindParam(3, $date, PDO::PARAM_STR);
$req -> execute();
$events = $req->fetchAll(PDO::FETCH_ASSOC);
$req->closeCursor();
return ($events);
}
Can I get all languages with this SQL function ? Or am I forced to create other functions for all cases ..?
Thanks.
You can build your SQL statement to only include the WHERE portions for language and type if the corresponding vars are set:
function retrieve_events_by_type ($DB, $type, $language, $date) {
$sql = "SELECT organizer, eventname, eventplace, language, eventdate, eventhour, eventminutes FROM events WHERE eventdate = :date ";
$sql .= empty($language) ? "" : " AND language LIKE :language ";
$sql .= empty($type) ? "" : " AND eventtype LIKE :type ";
$req = $DB->prepare($sql);
$req -> bindParam(':date', $date, PDO::PARAM_STR);
if (!empty($language)
$req -> bindParam(':language', $language, PDO::PARAM_STR);
if (!empty($type)
$req -> bindParam(':type', $type, PDO::PARAM_STR);
$req -> execute();
$events = $req->fetchAll(PDO::FETCH_ASSOC);
$req->closeCursor();
return ($events);
}
EDIT
Changed to named parameters instead of ?, as the index numbers would be different if you only passed two parameters instead of three.