如何推广我的SQL请求

时间:2012-12-22 00:55:55

标签: php sql

我没有花太多时间来优化我的代码或改进其模块化,因为我一直在学习PHP,但我认为是时候这样做了。我想要改进的第一件事是我的SQL调用。我做了大量不同的SQL查询,它们都遵循几种不同的模式。我通常只复制一个,粘贴到某个地方并改变我需要的东西。显然,这是我需要模块化的红旗。

我的问题是我不明白我是怎么做到的,因为我访问的每个表都有不同数量的变量,有时我想要一两个,而其他我想要整个表。此外,有时我想通过id,有时候通过姓名等来选择。我在这里寻找正确方向的一点,只是在弄清楚我应该如何做到这一点时遇到一些麻烦。以下是我的查询的一些示例:

function pricesByAlcohol($alcID) {
    $query = 'SELECT store_id, price FROM price WHERE alc_id = '.$alcID;
    //echo $query."<br>";
    $i= 0; //index
    $result = array();

    if ($stmt = $this->db->prepare($query)){ 
        /* execute statement */
        if($stmt->execute()) {
            $stmt->bind_result($store_id, $price);
            while($stmt->fetch()) {
                $result[$i] = array('store' => $store_id, 
                                    'price' => $price);
                $i++;
                //echo $id." ".$img."/".$text."<br>";
            }
        } else
            //echo "error";

        /* close statement */
        $stmt->close();
    } else {
        //echo "Prepare in fetchActiveAds failed: (" . $stmt->errno . ") " . $stmt->error;
    }

    return $result;
}

function store($storeID) {
    $query = 'SELECT name, address, gps FROM store WHERE id = '.$storeID;
    //echo $query."<br>";

    if ($stmt = $this->db->prepare($query)){ 
        /* execute statement */
        if($stmt->execute()) {
            $stmt->bind_result($name, $address, $gps);
            while($stmt->fetch()) {
                $result = array('name' => $name, 
                                'address' => $address,
                                'gps' => $gps);
                //echo $id." ".$img."/".$text."<br>";
            }
        } else
            //echo "error";

        /* close statement */
        $stmt->close();
    } else {
        //echo "Prepare in fetchActiveAds failed: (" . $stmt->errno . ") " . $stmt->error;
    }

    return $result;
}

function getAlcoholIDByNameSize($name, $size) {
    $query = 'SELECT id FROM alcohol WHERE size_id = '.$size.' AND name = "'.$name.'"';
    //echo $query."<br>";

    if ($stmt = $this->db->prepare($query)){ 
        /* execute statement */
        if($stmt->execute()) {
            $stmt->bind_result($id);
            while($stmt->fetch()) {
                $result = $id;
                //echo $id." ".$img."/".$text."<br>";
            }
        } else
            //echo "error";

        /* close statement */
        $stmt->close();
    } else {
        //echo "Prepare in fetchActiveAds failed: (" . $stmt->errno . ") " . $stmt->error;
    }

    return $result;
}

由于

1 个答案:

答案 0 :(得分:2)

你正在使用它的方式。

虽然它可能不是你想要的东西,你可以尝试一些ORM机制来隐藏经典OOP背后的SQL查询和结果检索。这将大大清理您的代码。对于PHP,您可以在下面的主题中找到一些指示:

Good PHP ORM Library?