使用默认前缀从300个表中选择mysql数据库

时间:2011-03-17 15:04:19

标签: php mysql sql phpmyadmin entity-attribute-value

我有一个程序可以从大约200个带前缀的表中进行选择。例如PBN_products,PBN_address,PBN_others。 而不是在每个表上为select语句附加前缀,有没有办法将前缀定义为默认值并进行选择?

$prefix=GET['prefix'];
mysql_connect(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD);
mysql_select_db(DB_DATABASE);
$sql = 'SELECT price, description, title, cost'.
        'FROM products, address, others';

如何定义不包含在所有表中的前缀?我有200张桌子。

4 个答案:

答案 0 :(得分:1)

我会查看一个类来做一些简单的查询抽象或某种类型的ORM库来做到这一点。样本就是这样的。

class Query {
    function from($tbl){
        return new Table($tbl);
    }
}
class Table {
    var $prefix = 'PBN_';
    var $tblname = '';

    function Table($name){
        $this->tblname = $this->prefix.$name;
    }
    function select($cols, $where = false, $order = false, $limit = false){
        $query = "SELECT {$cols} FROM {$this->tblname}";
        if($where) $query .= " WHERE ".$where; //add where
        if($order) $query .= " ORDER BY ".$order; //add order
        if($limit) $query .= " LIMIT ".$limit; //add limit
        return $query;
    }
}

$q = new Query;
$results = mysql_query($q->from('products')->select('*'));

这显然远没有完全或安全。只是一个抽象类如何加速你的SQL并为你做你的前缀的样本。

答案 1 :(得分:0)

您可以使用表名定义数组,并循环遍历该数组。将数组项附加到字符串时,将“PBN_”硬编码到该名称前面。

$arr = array("products","address","others");
$sql = "SELECT price, description, title, cost FROM ";
foreach ($arr as $tablename) {
    $sql = $sql . "PBN_" . $tablename . ", ";
}
$sql = substr($sql, 0, -2); // Remove last comma

然后,您可以将所有表名添加到数组中,并自动添加前缀。

答案 2 :(得分:-1)

你可以这样做吗?

$prefix = '';
if(isset($_GET['prefix'])){
    $prefix = mysql_real_escape_string(stripslashes($_GET['prefix']));
}

$sql = "SELECT price, description, title, cost 
           FROM {$prefix}products, {$prefix}address, {$prefix}others";
编辑:我同意评论这是不好的做法......另一种方法是将前缀存储在另一个表中,并在GET中传递该表的ID。这样可以减少SQL注入的风险。

$prefix = "";
if(isset($_GET['prefixid'])){
    $prefixid = mysql_real_escape_string(stripslashes($_GET['prefixid']));
    $query = "SELECT prefix FROM prefixes WHERE prefixid = $prefixid";
    $result = mysql_query($query);
    $prefix = mysql_result($result, 0, 0);
}
$sql = "SELECT price, description, title, cost 
           FROM {$prefix}products, {$prefix}address, {$prefix}others";

答案 3 :(得分:-1)

这样的事情怎么样?

 $prefix = GET['prefix'];

// add prefix to table names
foreach (array("products", "address", "others") as &$table) 
{
    $table = $prefix.$table;
}

mysql_connect(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD);
mysql_select_db(DB_DATABASE);

$sql = 'SELECT price, description, title, cost'.
       'FROM '.$table[0].', '.$table[1].', '.$table[2];