How to load a SQL query from a file instead of having an inline query. This is done to help with formatting and easier understanding of the code.
All that is needed is the simple file_get_contents() in the place of the query string.
fetch_all_colors.sql in the sql/ directory
SELECT `color` FROM `objects` ORDER BY `color` DESC;
PHP file running the PDO MySQL query:
$db = new PDO("mysql:host=127.0.0.1;dbname=test;charset=utf8mb4", 'root', '');
$select = $db->query(file_get_contents('sql/fetch_all_colors.sql'));
while ($row = $select->fetch(PDO::FETCH_ASSOC)) {
echo $row['color'].'<br>';
} This loads the fetch_all_colors.sql and executes it.
By using .htaccess and deny from all on SQL only files this prevents the viewing and indexing for the SQL files.
<Files ~ "\.sql$">
Order allow,deny
Deny from all
</Files> The example uses a small SQL query were putting it inline would make perfect sense. Loading the SQL query from a file would be more beneficial for large join queries like this query taken from here:
SELECT country.country_name_eng, SUM(CASE WHEN call.id IS NOT NULL THEN 1 ELSE 0 END) AS calls, AVG(ISNULL(DATEDIFF(SECOND, call.start_time, call.end_time),0)) AS avg_difference FROM country LEFT JOIN city ON city.country_id = country.id LEFT JOIN customer ON city.id = customer.city_id LEFT JOIN call ON call.customer_id = customer.id GROUP BY country.id, country.country_name_eng HAVING AVG(ISNULL(DATEDIFF(SECOND, call.start_time, call.end_time),0)) > (SELECT AVG(DATEDIFF(SECOND, call.start_time, call.end_time)) FROM call) ORDER BY calls DESC, country.id ASC;
A drained and empty Kennington reservoir images from a drone in early July 2024. The…
Merrimu Reservoir from drone. Click images to view larger.
Some early September spring shots from a bushwalk, It is still too early for wildflowers.
I recently needed to clone over a smaller NVMe to a 2TB SK Hynix Platinum…
If you ever needed a simple solution in Laravel to delete an entire directory and…
How to enforce only one user to register or be registered in a Laravel web…