seleccionar desde mysql db con 300 tablas usando un prefijo pnetworkingeterminado

Tengo un progtwig que selecciona de alnetworkingedor de 200 tablas con prefijo. por ejemplo, PBN_products, PBN_address, PBN_others. En lugar de agregar el prefijo en cada tabla para la instrucción select, ¿hay alguna manera de definir el prefijo como valor pnetworkingeterminado y hacer la selección?

$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'; 

¿Cómo puedo definir el prefijo que no se debe include en todas las tablas? Tengo 200 tablas.

Me gustaría ver en una class para hacer una abstracción de consulta simple o algún tipo de lib de ORM que hace esto. Una muestra sería así.

 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('*')); 

Esto obviamente no está ni cerca ni completo ni seguro. Solo una muestra de cómo una class de abstracción podría acelerar su sql y hacer sus prefijos por usted.

Podría definir una matriz con los nombres de tabla y recorrer esa matriz. Cuando anexa el elemento de la matriz a la cadena, ponga "PBN_" codificado delante de ese nombre.

 $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 

A continuación, puede agregar todos los nombres de tabla a la matriz, y el prefijo se agregará automáticamente.

¿Qué tal algo como esto?

  $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]; 

Podrías hacer algo como esto?

 $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"; 

EDITAR: Estoy de acuerdo con los comentarios de que esta es una mala práctica … Una alternativa sería almacenar los prefijos en otra tabla y pasar una ID de esa tabla en el GET. Esto te haría less vulnerable a las inyecciones de 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"; 
    Intereting Posts