我有一个带有列的MySQL表:
opID, opDateAdded, opLastUpdated, opUser, opPropertySaleID, opArray, refurbID, opRefurbCost, opViewingArranged, opOfferAccepted, opOfferAcceptedID, opPaon, opStreet, opPostcode, opPropertyType, opViewingDate, opViewingBy, opViewingPersonName, opFloorArea, opBedrooms, opBathrooms, opReceptions, opAskingPrice, opValuation, opOptMatchingBedrooms, opOptMatchingBuild, opOptMatchingType, opOptSimilarFloor, opOptDistance, opLatitude, opLongitude, opNotes
我希望有一个功能可以更新此表的列,但有时仅需要更新3-4列,而并非总是所有列。
我只是想知道实现此目标的最佳方法是什么?
我可以创建一个像这样的函数:
function updateOpportunity($opID, $opDateAdded, $opLastUpdated, $opUser, $opPropertySaleID, $opArray, $refurbID, $opRefurbCost, $opViewingArranged, $opOfferAccepted, $opOfferAcceptedID, $opPaon, $opStreet, $opPostcode, $opPropertyType, $opViewingDate, $opViewingBy, $opViewingPersonName, $opFloorArea, $opBedrooms, $opBathrooms, $opReceptions, $opAskingPrice, $opValuation, $opOptMatchingBedrooms, $opOptMatchingBuild, $opOptMatchingType, $opOptSimilarFloor, $opOptDistance, $opLatitude, $opLongitude, $opNotes) {
//update
}
并将它们设置为可选,然后检查是否已设置它们,然后更新它们(在MySQL中使用IFNULL)
或者创建属性类并传递属性会更好,更整洁:
function updateOpportunity($property) {
//update
}
我只是想知道是否存在创建用于更新并非总是需要同时更新的大量列的函数的标准。
您可以创建一个适用于所有表和列的通用函数。
function update($table, $data, $id)
{
$set= array();
foreach ($data as $key => $value)
{
$set[] = "{$key} ='".mysqli_real_escape_string($value)."'";
}
$sql = "UPDATE {$table} SET ".implode(', ', $set)." WHERE ID = '$id'";
mysqli_query($connection,$sql);
}
这是一个使用预准备语句的函数。
function update($table, $data, $id)
{
$setPart = array();
$bindings = array();
foreach ($data as $key => $value)
{
$setPart[] = "{$key} = :{$key}";
$bindings[":{$key}"] = $value;
}
$bindings[":id"] = $id;
$sql = "UPDATE {$table} SET ".implode(', ', $setPart)." WHERE ID = :id";
$stmt = $pdo->prepare($sql);
$stmt->execute($bindings);
}
这里的$ connection是一个mysqli_connection对象,我们需要创建该对象来执行任何查询以了解有关此单击此处的信息。
在第二个函数$ pdo中,我们需要创建PDO连接对象来执行查询,请单击此处以获取更多信息。
您可以阅读此链接以获取更多信息。
为了防止SQL注入,您可以使用mysqli_real_escape_string()函数单击此处以获取更多信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句