有一种方法可以在更新查询后修改哪些字段?
我想跟踪XXX用户修改的字段...使用有效记录的任何方式?
答案 0 :(得分:2)
我需要这个确切的功能所以我写了这段代码。它返回受影响的字段数。
功能开始:
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;
}
答案 1 :(得分:1)
使用活动记录无法轻松获得此功能,但如果您只支持一种特定的数据库类型(比方说MySQL),您可以随时使用触发器吗?
或者,亚当是对的。如果你有UPDATE的WHERE标准,你可以在执行UPDATE之前选择它,然后循环浏览旧版本和新版本。
这正是Triggers的创作工作,但当然这太过依赖于数据库,这使得这个便携式的yada yada yada变得不那么容易了。
答案 2 :(得分:0)
操作的指令:
SELECT
行,该用户想要修改UPDATE
它简单