【问题标题】:How to declare multiple where condition for a table如何为表声明多个where条件
【发布时间】:2017-10-23 07:24:03
【问题描述】:

嗨,伙计,我有一个问题。 如何仅在一个 php 中声明多个 where 子句条件。 我试图让我的项目至少有一个 php 文件。我只想在一个 php 文件中创建 where 子句。

这就是我的意思。我想将我的代码放入一个 php 文件或一个 <?php ?> 中。像这样的php代码

<?php
include("../../Connections/koneksi.php");

$date1= $_POST['date1'];
// Data for Titik1
$sql = "SELECT * FROM termocouple where tanggal='$date1' AND silo='Silo 1'";
$query = mysqli_query($db,$sql);
$rows = array();

while($tmp= mysqli_fetch_assoc($query)) {
    $rows[] = $tmp;
}

echo json_encode($rows);
mysqli_close($db);
?> 

在上面的代码中,查询有选择表termocouple,where 条件的过滤器是tanggalsilo。现在的问题是我有 12 个这样的 php 文件。每个php的不同之处在于选择silo,我输入Silo 1,Silo 2,Silo 3, ....Silo 12

请有人帮我解决这个问题。我想在一个 php 文件中让它变得简单。当你给我一个例子时,我真的很感激

【问题讨论】:

  • 意味着您需要一个 php 文件来处理 silo='Silo 1' silo='Silo 2' silo='Silo 3' .. silo='Silo 12' 这意味着您想要一个可重复使用的代码。是这样吗?
  • 是这样的。我想在一个 php 文件中创建 12 个具有相同查询但 silo id 选择不同的 php 文件,
  • 那为什么不把 'silo' 也作为 POST 传递呢?和日期1一样吗?并使 $sql = "SELECT * FROM termocouple where tanggal='$date1' AND silo='$silo";
  • @keysl 我的意思是这样。在一个单一的 php.ini 中。我想使用此查询$sql = "SELECT * FROM termocouple where tanggal='$date1' AND silo='Silo 1'"; 进行选择,但id 的silo 的值不同。 id 的 silo 值为 silo='Silo 1'silo='Silo 2'.....silo='Silo 12'
  • 你知道吗,你的代码很容易被sql注入?

标签: php


【解决方案1】:

为了尽量减少你的代码,如果你在同一个项目中多次使用同一个查询或code,更建议创建一个函数,你可以在需要执行代码时调用它.

所以在这里,由于您使用相同的查询 12 次,您将必须创建一个执行此查询的函数,然后每次要执行查询时调用此函数。

函数需要参数,所以你必须给函数提供数据库连接参数$db才能连接到数据库,因为你在函数内部使用了这个连接,然后你必须添加参数的where子句也。

所以这里的函数将使用从$_POST 获取的数据库连接$db$date1 和从$_POST 获取的$silo

在函数结束时,您可以返回任何您希望返回的值,因此在您的情况下,您必须返回从查询中获取的 $rows 数组

创建一个普通的php file并在其中创建一个函数。 假设文件名是libraries.php

在此文件中写入以下代码:

<?php
    function getRows($db, $date, $silo) {
        $sql = "SELECT * FROM termocouple where tanggal='$date' AND silo='$silo'";
        $query = mysqli_query($db, $sql);
        $rows = array();

        while($tmp= mysqli_fetch_assoc($query)) {
            $rows[] = $tmp;
        }

        return json_encode($rows);
    }
?>

在您调用查询的每个文件中,您将删除 php 代码并将其替换为以下内容:

<?php
include("../../Connections/koneksi.php");
include("{path-to-file}/libraries.php");

$date1= $_POST['date1'];
$silo = $_POST['silo'];

$rows = getRows($db, $date1, $silo) ;
?> 

【讨论】:

  • 你能给我解释一下马里奥吗?
  • $rows=getRows($db,$date1,$silo);的作用
  • 我想我明白了。它仍然需要客户端将变量放入$silo 对吗?
  • 你可以把它静态放在每个页面$silo = 'silo 1'中,也可以从$_POST请求中获取。这取决于你
  • 也许我没有从你的回答中得到正确的结论。当我在每个页面中使用静态时,我仍然会像您的第二个代码一样编写更多代码?
【解决方案2】:

我假设这 12 个 PHP 是在不同的场景中调用的。为什么不从客户端传递一些参数,以便 PHP 知道要执行哪个场景。

$date1= $_POST['date1'];
$silo= $_POST['silo'];//This could be 'Silo 1 OR 'Silo 2' etc.
// Data for Titik1
$sql = "SELECT * FROM termocouple where tanggal='$date1' AND silo='$silo'";
$query = mysqli_query($db,$sql);

【讨论】:

  • 这也是我推荐的。只需使用 mysql_real_escape_string 添加一点安全性就可以了。
  • @keysl mysql_real_escape_string 已弃用并且在 php 7 中不可用 - 准备好的语句是要走的路
  • @Jaydeep Rajput 使用客户端时就像我现在所做的那样。条件是这样的。我想显示来自Silo 1 - Silo 12 的数据,但它将显示在不同的表中,并且每个表只包含筒仓 ex 的数据:在 2017 年 10 月 23 日有来自筒仓 1-7 的数据,然后它将显示 7 个表包含来自每个筒仓 1-7
  • @Philipp 该代码只是我制作的快速代码。我第一次尝试然后我会为了安全而改变
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-10
  • 1970-01-01
  • 2019-03-23
相关资源
最近更新 更多