douzhang3822 2018-05-02 18:20
浏览 52
已采纳

干查询,稍后在php中的if语句中添加where子句

I'm a fan of a dry code. I'm not sure is doable but I'm trying to save me from writing a double query.

Here's my example:

$link       = $_SERVER['PHP_SELF'];
$link_array = explode('/', $link);
$page       = end($link_array);

In the first part of my code, I'm parsing my link.

if (strpos($link, 'something') !== false) {

    $sql = $ee->db->query("SELECT * FROM `mytable` WHERE order_id = '$page'");
        foreach ($sql->result() as $row) {
            $tracking_code = $row->tracking_id;
            $carrier_name  = $row->carrier_name;
            echo "The real carrier name is: {$carrier_name} .<br>";
            echo "The real tracking code is: " . $tracking_code . ' .<br>';
} else {

    $sql = $ee->db->query("SELECT * FROM `mytable` WHERE order_hash = '$page'");
        foreach ($sql->result() as $row) {
            $tracking_code = $row->tracking_id;
            $carrier_name  = $row->carrier_name;
            echo "The real carrier name is: {$carrier_name} .<br>";
            echo "The real tracking code is: " . $tracking_code . ' .<br>';
}

Then I run two queries: depends on the link that I'm parsing I'm gonna retrieve two different set of data.

I was wondering if it is possible to have a different approach, something in this line:

$sql = $ee->db->query("SELECT * FROM `mytable`");

right after my variables and then, inside the if statement:

if (strpos($link, 'something') !== false) {
    $sql =. $ee->db->query("WHERE order_id = '$page'");
    #code
} else {
    $sql =. $ee->db->query("WHERE order_hash = '$page'");
    #code
}

Or any other way to avoid to rewrite my code could be fine. In this case I'm not gonna save a lot, I'm just trying to understand what it could be the best approach.

  • 写回答

3条回答 默认 最新

  • dqs13465424392 2018-05-02 18:49
    关注

    Overlooking the injected $page variable issue, you really only need to replace the column name it looks like:

    $sql = $ee->db->query("SELECT * FROM `mytable` WHERE order_".((strpos($link, 'something') !== false)? "id" : "hash")." = '$page'");
    
    foreach ($sql->result() as $row) {
        $tracking_code = $row->tracking_id;
        $carrier_name  = $row->carrier_name;
        echo "The real carrier name is: {$carrier_name} .<br>";
        echo "The real tracking code is: " . $tracking_code . ' .<br>';
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 关于#单片机#的问题:Lora通讯模块hc-14电路图求内部原理图
  • ¥50 esp32 wroom 32e 芯片解锁
  • ¥15 bywave配置文件写入失败
  • ¥20 基于Simulink的ZPW2000轨道电路仿真
  • ¥15 pycharm找不到在环境装好的opencv-python
  • ¥15 在不同的执行界面调用同一个页面
  • ¥20 基于51单片机的数字频率计
  • ¥50 M3T长焦相机如何标定以及正射影像拼接问题
  • ¥15 keepalived的虚拟VIP地址 ping -s 发包测试,只能通过1472字节以下的数据包(相关搜索:静态路由)
  • ¥15 Mabatis查询数据