我有一个MySQL查询,显示来自我的数据库的数据。这是查询:
$sql = "SELECT SUM(InvoiceAmount) AS TotalBilling,SUM(ClientCostToDate) AS WIP FROM Estimates WHERE date_format(InvoiceDate, '%Y-%m')=date_format(now(), '%Y-%m')";
此查询将MySQL数据库中的数据显示在我页面上的HTML表格中。我需要根据URL为此$sql
查询添加一个小的更改。这可能吗?
理想情况下,它的工作方式如下:
如果是/或index.php,请运行:
$sql = "SELECT SUM(InvoiceAmount) AS TotalBilling,SUM(ClientCostToDate) AS WIP FROM Estimates WHERE date_format(InvoiceDate, '%Y-%m')=date_format(now(), '%Y-%m')";
如果是/london.php,请运行:
$sql = "SELECT SUM(InvoiceAmount) AS TotalBilling,SUM(ClientCostToDate) AS WIP FROM Estimates WHERE Studio = 'London' date_format(InvoiceDate, '%Y-%m')=date_format(now(), '%Y-%m')";
每页查询只有一点变化 - 那就是显示Studio = 'London'
的结果。这样我就可以在london.php上显示仅与伦敦相关的结果。
实现这一目标的最佳方法是什么?谢谢你的帮助。
这是我的完整脚本:
<?php
require_once 'config.php';
// create connection
$conn = new mysqli($currentConfig['host'], $currentConfig['user'], $currentConfig['pass'], $currentConfig['name']);
// check connection
if ($conn->connect_error) {
die('Connection failed: '.$conn->connect_error);
}
$sql = "SELECT SUM(InvoiceAmount) AS TotalBilling,SUM(ClientCostToDate) AS WIP FROM Estimates WHERE date_format(InvoiceDate, '%Y-%m')=date_format(now(), '%Y-%m') AND Studio = 'Splash London'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while ($row = $result->fetch_assoc()) {
$wip = $row['WIP'];
$total_billing = $row['TotalBilling'];
// US national money format
setlocale(LC_MONETARY, 'en_US');
// echo data into HTML table
echo
'<tbody>'.'<tr>'.'<td>'. money_format('%(#10n',$total_billing) . "\n" .'</td>'.'<td>'. money_format('%(#10n',$wip) . "\n" .'</td>';
}
} else {
echo 'No results';
}
$conn->close();
答案 0 :(得分:3)
是的,这是使用服务器端脚本可以做的最基本的事情。
首先,您不需要多个脚本。 index.php会很好。
添加工作室参数。
所以你可以选择使用:
http://../index.php
或
http://..index.php?studio=london
此时应该很明显,这样做的好处是,当你在伦敦以外的数据库中有其他工作室时,这段代码仍然有用。
在您的脚本顶部:
if (isset($_GET['studio']) {
$studio = $_GET['studio'];
} else {
$studio = '';
}
现在,您可以根据是否传递了url参数来运行不同的查询。
if ($studio == '') {
// $sql = ...
} else {
$sql = "SELECT SUM(InvoiceAmount) AS TotalBilling,SUM(ClientCostToDate) AS WIP FROM Estimates WHERE Studio = '$studio' date_format(InvoiceDate, '%Y-%m')=date_format(now(), '%Y-%m')";
}
所以,敷衍的评论 - 这段代码很容易被sql注入。查询方式的具体细节取决于您使用的客户端库。您应该使用mysqli或PDO和参数绑定,而不是将变量放入字符串,然后绑定该变量。
例如:
$sql = "SELECT SUM(InvoiceAmount) AS TotalBilling,SUM(ClientCostToDate) AS WIP FROM Estimates WHERE Studio = :studio date_format(InvoiceDate, '%Y-%m')=date_format(now(), '%Y-%m')";
有关详细信息,请查看mysqli或PDO的相应手册条目。
答案 1 :(得分:1)
也许你可以使用$_SERVER['REQUEST_URI']
。
例如,如果您的完整链接是:http://www.mypage.com/index.php
$_SERVER[HTTP_HOST]
已经&#34; www.mypage.com&#34;
$_SERVER[REQUEST_URI]
有&#34; /index.php"
所以你可以这样做:
if($_SERVER[REQUEST_URI] == "/london.php"){
$sql = "SELECT SUM(InvoiceAmount) AS TotalBilling,SUM(ClientCostToDate) AS WIP FROM Estimates WHERE Studio = 'London' date_format(InvoiceDate, '%Y-%m')=date_format(now(), '%Y-%m')";
}
else{
$sql = "SELECT SUM(InvoiceAmount) AS TotalBilling,SUM(ClientCostToDate) AS WIP FROM Estimates WHERE date_format(InvoiceDate, '%Y-%m')=date_format(now(), '%Y-%m')";
}