2010-07-05 71 views
0

我有一个令人讨厌的问题。我想摆脱某个特定的数据库字段,但我不确定它调用哪些代码。有没有办法找出这个字段的使用/调用方式(除了文本搜索代码;这是相当无用的,看看字段如何命名为'电子邮件')?监视某个数据库字段的使用情况

干杯

+0

在SQL Server中存在有sp_depends可 - 你可以尝试寻找的:mysql相当于sp_depends可 - 的“SQL Server”。 – amelvin 2010-07-05 13:35:42

回答

2

我会首先搜索文件中的表名,然后只搜索包含表名称的字段名称的表。

我写了一个程序来做我自己的目的。它构建表和字段的内存列表,并将这些表与这些字段相关联。然后它循环遍历表,搜索包含表名的代码文件,然后在这些文件中搜索找到的表中的字段。我建议您采用类似的方法。

1

设置MySQL记录所有查询一段时间可能会有帮助。查询会给你提示在哪里寻找

1

蛮力 - 建立一个测试实例 - 删除列 - 并练习你的测试套件。

+0

不妨做到这一点,因为无论如何你都会在更改后运行所有测试。你不是吗? – 2010-07-05 15:24:03

+0

我会,如果系统不是太老,不包含预定义的测试;) – Robbert 2010-07-06 11:00:50

-1

你应该在PHP中做到这一点我希望

例如:

<?php 
class Query 
{ 
    var $command; 
    var $resource; 
    function __construct($sql_command = '') 
    { 
     $this->command = $sql_command; 
    } 

    public function setResource($resource) 
    { 
     $this->resource = $resource; 
    } 
} 

//then you would have some kind of database class, but here we would modify the query method. 

class Database 
{ 
    function query(Query $query) 
    { 
     $resource = mysql_query($query->command); 
     $query->setResource($resource); 

     //Then you can send the class to the monitor 
     QueryMonitor::Monitor($query); 
    } 
} 

abstract class QueryMonitor 
{ 
    public static Monitor(Query $query) 
    { 
     //here you use $query->resource to do monitoring of queryies 
     //You can also parse the query and gather what query type it was:- 
     //Select or Delete, you can also mark what tables were in the Query 
     //Even meta data so 
     $total_found = mysql_num_rows($query->resource); 
     $field_table = mysql_field_table ($query->resource); 
     //Just an example.. 
    } 
} 
?> 

显然,这将是比这更先进的,但你可以建立一个系统来监控每个查询,每个查询元在日志文件或我们的数据

+0

我认为他正在寻找一个事后解决方案,而不是一个新的方式来编写未来的项目... – ceejayoz 2010-07-05 13:21:44

+0

哦,好吧,这是我的错,我很抱歉 – RobertPitt 2010-07-05 13:23:22

0

在该表上创建一个插入触发器,该表监视该列上的插入。

同时创建一个名为monitor另一个表只有一列email

使该表中插入NEW.email字段的值到monitor.email以及在真正的表。

这样你就可以运行你的应用程序,并检查是否有任何非空值的监控表