根据URL运行不同的MySQL查询

时间:2016-09-16 22:10:12

标签: php mysql sql

我有一个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();

2 个答案:

答案 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')";
}