Bir güncelleştirme sorgusu sonra değiştirilen hangi alanların almak için bir yol var?
Ben ... ne alan XXX kullanıcı değiştirilmiş izlemek isteyen aktif kayıtlarını kullanarak herhangi bir yolu?
Ben bu kodu yazdım ben bu tam işlevselliği gerekli. Bu etkilenen alanların sayısını verir.
FONKSİYON BAŞLIYOR:
function mysql_affected_fields($sql)
{
// Parse SQL update statement
$piece1 = explode( "UPDATE ", $sql);
$piece2 = explode( "SET", $piece1[1]);
$sql_parts['table'] = trim($piece2[0]);
$piece1 = explode( "SET ", $sql);
$piece2 = explode( "WHERE", $piece1[1]);
$sql_parts['set'] = trim($piece2[0]);
$fields = explode (",",$sql_parts['set']);
foreach($fields as $field)
{
$field_parts = explode("=",$field);
$field_name = trim($field_parts[0]) ;
$field_value = trim($field_parts[1]) ;
$field_value =str_replace("'","",$field_value);
$sql_parts['field'][$field_name] = $field_value;
}
$piece1 = explode( "WHERE ", $sql);
$piece2 = explode( ";", $piece1[1]);
$sql_parts['where'] = trim($piece2[0]);
// Get original field values
$select = "SELECT * FROM ".$sql_parts['table']." WHERE ".$sql_parts['where'];
$result_latest = mysql_query($select) or trigger_error(mysql_error());
while($row = mysql_fetch_array($result_latest,MYSQL_ASSOC))
{
foreach($row as $k=>$v)
{
if ($sql_parts['field'][$k] == $v)
{
}
else
{
$different++;
}
}
}
return $different;
}
Orada kolayca almak için aktif kaydını kullanarak bir yolu yoktur, ancak yalnızca belirli bir veritabanı türü (en MySQL diyelim) destekleyen eğer hep Tetikleyiciler'i kullanabilirsiniz?
Yoksa, Adam hakkında doğru. Eğer GÜNCELLEME bir NEREDE kriterleri varsa karşılaştırarak, eski ve yeni sürümleri ile güncelleme sonra döngü yapmadan önce bunu seçebilirsiniz.
Bu Tetikleyiciler için oluşturulan çalışma tam tür, ama tabii bu daha az taşınabilir yada yada yada yapar DB çok fazla güven koyar.