2011-02-05 4 views
-1

Как вы можете скрыть sql в php, (создавать общие команды или функции sql в php), поэтому у вас нет оператора sql в вашем php-коде? Я не хочу использовать ORM или ООП.Скрытие sql в php

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

+0

Я могу понять, почему он хотел бы это сделать; Это упрощает динамическое создание запроса, поскольку вы можете просто добавлять/перезаписывать команды/предложения с помощью '$ query ['WHERE'] = 'parameters'' и удалять их с помощью' unset ($ query [' WHERE ']); '. Это было бы намного сложнее, если бы вам приходилось разбирать Query-String каждый раз, когда вы хотите что-то с этим сделать. – anroesti

+0

Если у кого-то есть доступ к исходному коду, вы действительно беспокоитесь о том, что скрываете тот факт, что используете SQL? – ceejayoz

ответ

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-команд и значения параметров, если они являются строками или более командами, если они являются массивами.

Смежные вопросы