2011-02-05 36 views
-1

如何在php中隐藏sql(在php中创建常用的sql命令或函数),因此您的php代码中没有sql语句?我不想使用ORM或OOP。在php中隐藏sql

的PunBB做这样的事情:

$query = array(
    'SELECT' => 'f.id AS fid, f.forum_name, f.moderators, f.redirect_url, fp.post_replies, fp.post_topics, t.id AS tid, t.subject, t.first_post_id, t.closed, p.poster, p.poster_id, p.message, p.hide_smilies, p.posted', 
    'FROM'  => 'posts AS p', 
    'JOINS'  => array(
     array(
      'INNER JOIN' => 'topics AS t', 
      'ON'   => 't.id=p.topic_id' 
     ), 
     array(
      'INNER JOIN' => 'forums AS f', 
      'ON'   => 'f.id=t.forum_id' 
     ), 
     array(
      'LEFT JOIN'  => 'forum_perms AS fp', 
      'ON'   => '(fp.forum_id=f.id AND fp.group_id='.$forum_user['g_id'].')' 
     ) 
    ), 
    'WHERE'  => '(fp.read_forum IS NULL OR fp.read_forum=1) AND p.id='.$id 
); 

任何人都知道这是如何实现的?

+4

为什么?你想故意让你的代码少**可读性和可维护性?关心你解释为什么? – ircmaxell 2011-02-05 19:11:20

回答

0

根据您的阵列具有以下功能,您可以生成一个MySQL查询:

function create_query ($array) { 

    $query = '';   

    foreach ($array as $command => $parameters) { 
     $query .= " $command "; 
     if (is_array ($parameters)) 
      $query .= " (" . create_query ($parameters) . ") "; // Hello recursion 
     else 
      $query .= "$parameters "; 
    } 

    return $query; 

} 

此函数假设,该阵列的键是总是的MySQL命令和值参数,如果它们是字符串,或者更多的命令,如果它们是数组。