由于数据库中用的是用户账户作为用户的判断依据(而不是ID),当用户账户修改时,要同时将其他表中的用户账户同步修改。
代码如下:
//刚开始执行时可以先不传type属性,看看将会修改到哪些表的哪些字段,待确认后再传入&type=do来执行修改操作
public function multipleUser($db = '', $old = '', $new = '', $type = 'check')
{
ini_set('memory_limit', '1024M');
set_time_limit(0);//不限时
if ($db == '') die();
if ($old == '') die();
if ($new == '') die();
/* 记录数组 */
$record = array();
/* 所有表 */
$sql_tables = 'SELECT TABLE_NAME FROM information_schema.TABLES WHERE table_schema = "'.$db.'"';
$res_tables = $this->dao->query($sql_tables)->fetchAll();//这是框架函数,请自行执行查询语句
foreach ($res_tables as $table) {
$tableName = $table->TABLE_NAME;
if (strstr($tableName, 'view_')) {
continue;//排除视图
}
$sql = 'SELECT * FROM '.$tableName;
$res = $this->dao->query($sql)->fetchAll();
foreach ($res as $item) {
foreach ($item as $key => $val) {
if ($val == $old) {
$record[$tableName][$key] = 1;
}
}
}
}
foreach ($record as $key => $val) {
echo $key.'<br/>【';
foreach ($val as $k => $v) {
echo $k.'】【';
}
echo '】<br/>-------------------------------------<br/>';
}
if ($type != 'do') {
die();
}
foreach ($record as $table => $cols) {
foreach ($cols as $col => $val) {
if ($col == 'bugreason' || $col == 'steps') {
continue;
}
if ($table == 'zt_user') {
continue;
}
$this->dao->update($table)->set($col)->eq($new)->where($col)->eq($old)->exec();
}
}
var_dump('done');
}