2011-02-05 53 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命令和值參數,如果它們是字符串,或者更多的命令,如果它們是數組。