我没有花太多时间来优化我的代码或改进其模块化,因为我一直在学习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;
}
由于
答案 0 :(得分:2)
你正在使用它的方式。
虽然它可能不是你想要的东西,你可以尝试一些ORM机制来隐藏经典OOP背后的SQL查询和结果检索。这将大大清理您的代码。对于PHP,您可以在下面的主题中找到一些指示: