2012-12-22 72 views
-1

我没有花太多时间优化我的代码或改进模块化,因为我一直在学习PHP,但我认为现在是时候这样做了。我想要改进的第一件事是我的SQL调用。我做了大量不同的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

一件事,这将有助于你前进的学习使用参数化查询,最好使用PDO作为数据库层。你现在在做什么,用变量构建SQL语句,很容易出现SQL注入和引用错误。查看http://bobby-tables.com/php.html关于如何在PHP中编写参数化查询的示例。 –

+0

谢谢!我一定会考虑这一点。 –

回答

2

您使用SQL它应该被使用的方式。

虽然它可能不是你所追求的东西,但你可以尝试一些ORM机制来隐藏经典OOP后面的SQL查询和结果检索。这将清理你的代码大的时间。对于PHP,你可以找到下面的线程上一些指针:

Good PHP ORM Library?