$db_prefix = 'db_'; $str = 'SELECT a.*,count(c.id) csum,u.* FROM __USER__ u LEFT JOIN __ARTICLE__ a ON a.uid=u.id LEFT JOIN __COMMENT__ c ON a.id=c.aid WHERE a.is_deleted=0 and a.cid=%d GROUP BY c.aid,a.id LIMIT %d'; $str = preg_replace_callback('/__([A-Z]+)__/', function($matches){ global $db_prefix; //return $db_prefix.strtolower(substr($matches[0],2,strlen($matches[0])-4)); return $db_prefix.strtolower($matches[1]); },$str); echo $str;
最后输出:
SELECT a.*,count(c.id) csum,u.* FROM db_user u LEFT JOIN db_article a ON a.uid=u.id LEFT JOIN db_comment c ON a.id=c.aid WHERE a.is_deleted=0 and a.cid=%d GROUP BY c.aid,a.id LIMIT %d
在tp中可以直接用C('DB_PREFIX')代替$db_prefix;
function changePrefix($sql){ $sql = preg_replace_callback('/__([A-Z]+)__/',function($matches){ return C('DB_PREFIX').strtolower($matches[1]); },$sql); return $sql; }
参考:
http://php.net/manual/zh/function.preg-replace-callback.php