我是开发区的新手。对于我的产品,我需要处理近100张桌子。我觉得在DB中找到一个单词有风险。是否有任何查询可用于搜索数据库中任何表中可用的单词。如果可能,结果会给出表名。
谢谢...
答案 0 :(得分:1)
mysql中有一个FULL TEXT搜索选项..但它一次只能在一个表上运行。
要搜索多个表,您需要编写一些动态查询或非规范化
答案 1 :(得分:0)
如果你有phpMyAdmin可以。选择数据库,然后选择“搜索”选项卡。您可以选择一个或多个要搜索的表。如果将字段名称留空,则会在任何字段中搜索。比你可以按表查看结果。 (注意:我在phpMyAdmin v3.2中测试过)
答案 2 :(得分:0)
对于独立解决方案我建议使用此功能:
<?php
function search_all_databases($search_token){
$db = array(
'host' => 'localhost'
,'user' => 'root'
,'pass' => ''
,'database' => 'buns'
,'prefix' => ''
,'type' => 'mysqli'
);
$mysqli = new mysqli($db['host'], $db['user'], $db['pass'], $db['database']);
$output = "<table><thead><tr><th> Database Name </th><th> Occurence </th></tr></thead>";
$sql = "show tables";
$ret = $mysqli->query($sql);
if( 0 < $ret->num_rows ){
$output.= '<tbody>';
while( $row = $ret->fetch_array() ){
$output.= '<tr>';
$sql_search_fields = Array();
$table = $row[0];
$output.= '<td>'.$table.'</td>';
$sql2 = "SHOW COLUMNS FROM ".$table;
$ret2 = $mysqli->query($sql2);
if( 0 < $ret2->num_rows ){
while( $row2 = $ret2->fetch_array() ){
$colum = $row2[0];
$sql_search_fields[] = "`".$colum."` like('%".$search_token."%')";
}
$ret2->close();
}
if( 0 < count( $sql_search_fields ) ){
$search = "select * from ".$table." where ";
$search.= implode(" OR ", $sql_search_fields );
$rs3 = $mysqli->query($search);
$output.= '<td>'.$rs3->num_rows.'</td>';
}else{
$output.= '<td>0</td>';
}
if( 0 < $rs3->num_rows ){
$rs3->close();
}
$output.= '</tr>';
}
$output.= '</tbody>';
$ret->close();
}
return $output;
}
echo search_all_databases('a');
这个函数依赖于mysqli,你可以把它改成另一个像mysql这样的数据库方法。
此外,这将输出一个包含结果的表格。如果您想在另一个位置使用结果,我建议将所有结果放在一个数组左右。