我有一个程序可以从大约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张桌子。
答案 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];