Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 根据URL运行不同的MySQL查询_Php_Mysql_Sql - Fatal编程技术网

Php 根据URL运行不同的MySQL查询

Php 根据URL运行不同的MySQL查询,php,mysql,sql,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查询添加一个小更改

我有一个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')";
$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')";
如果为/london.php,请运行以下命令:

$sql = "SELECT SUM(InvoiceAmount) AS TotalBilling,SUM(ClientCostToDate) AS WIP FROM Estimates WHERE date_format(InvoiceDate, '%Y-%m')=date_format(now(), '%Y-%m')";
$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上显示只与London相关的结果

实现这一目标的最佳方式是什么?谢谢你的帮助

以下是我的完整脚本:

<?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();

也许您可以使用
$\u服务器['REQUEST\u URI']

例如,如果完整链接为:

$\u服务器[HTTP\u主机]
有“www.mypage.com”

$\u服务器[请求URI]
具有“/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')";
}

也许您可以使用
$\u服务器['REQUEST\u URI']

例如,如果完整链接为:

$\u服务器[HTTP\u主机]
有“www.mypage.com”

$\u服务器[请求URI]
具有“/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')";
}

是的,这是使用服务器端脚本可以做的最基本的事情

首先,您不需要多个脚本。index.php就可以了

添加studio的参数

因此,您可以选择使用:

http://../index.php

在这一点上应该很明显,这样做的好处是,当数据库中有伦敦以外的其他工作室时,此代码仍然有效

在脚本的顶部:

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的相应手册条目以了解更多详细信息。

是的,这是您可以使用服务器端脚本执行的最基本类型的操作

首先,您不需要多个脚本。index.php就可以了

添加studio的参数

因此,您可以选择使用:

http://../index.php

在这一点上应该很明显,这样做的好处是,当数据库中有伦敦以外的其他工作室时,此代码仍然有效

在脚本的顶部:

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的相应手册条目以了解更多详细信息。

只需创建一个if语句只需创建一个if语句即可,但仍需要他拥有多个文件(每个城市一个)。为了DRY的利益(不要重复你自己),gview的答案更好。@BrianSchroeter我完全同意。我只是给出了“明显而直接的解决方案”,以防OP只是在寻找类似的东西。但gview的答案是正确的。这会起作用,但仍然需要他拥有多个文件(每个城市一个)。为了DRY的利益(不要重复你自己),gview的答案更好。@BrianSchroeter我完全同意。我只是给出了“明显而直接的解决方案”,以防OP只是在寻找类似的东西。但gview的答案是正确的。