Как создать статическую функцию create table php?

Я создал статическую функцию создания таблицы и вставки, но я не знаю, как использовать их в разных базах данных. Примеры:

        static public function createTableA($TABLE,$DATA) 
        {       
            $conn=self::getConnectionA();           
            $SQL = "CREATE TABLE {$TABLE}"; 
            $SQL. = " (";
            foreach($DATA as$key) 
            {
                $SQL.=$key.","; 
            }           
            $SQL=rtrim($SQL,","); 
            $SQL.= ") ";            
            $result=$conn->query($SQL); 
            if (!($result)) 
            {
                return false; 
            } 
            else 
            {
                return true; 
            }           
            mysqli_close($conn);            
        }
        static public function createTableB($TABLE,$DATA) 
        {       
            $conn=self::getConnectionB();           
            $SQL = "CREATE TABLE {$TABLE}"; 
            $SQL. = " (";
            foreach($DATA as$key) 
            {
                $SQL.=$key.","; 
            }           
            $SQL=rtrim($SQL,","); 
            $SQL.= ") ";            
            $result=$conn->query($SQL); 
            if (!($result)) 
            {
                return false; 
            } 
            else 
            {
                return true; 
            }           
            mysqli_close($conn);            
        }

w в приведенном выше примере я хотел бы создать статическую функцию SQL, которую я мог бы использовать в обеих базах данных [$conn=self::getConnectionA(); and $conn=self::getConnectionB();] Может как то так ???

        static public function createTable($TABLE,$DATA) 
        {           
            $SQL = "CREATE TABLE {$TABLE}"; 
            $SQL. = " (";
            foreach($DATA as$key) 
            {
                $SQL.=$key.","; 
            }           
            $SQL=rtrim($SQL,","); 
            $SQL.= ") ";
            return $SQL;        
        }
        static public function createTableA($TABLE,$DATA) 
        {       
            $conn=self::getConnectionA();
            $sql=self::createTable($TABLE,$DATA);           
            $result=$conn->query($sql); 
            if (!($result)) 
            {
                return false; 
            } 
            else 
            {
                return true; 
            }           
            mysqli_close($conn);            
        }
        static public function createTableB($TABLE,$DATA) 
        {       
            $conn=self::getConnectionB();
            $sql=self::createTable($TABLE,$DATA);           
            $result=$conn->query($sql); 
            if (!($result)) 
            {
                return false; 
            } 
            else 
            {
                return true; 
            }           
            mysqli_close($conn);            
        }

Прошу конструктивного мнения по этой теме и предложений по лучшему решению, пожалуйста, примеры кода в ответах, спасибо и всего наилучшего.

Почему бы не сделать $ CONNECTION другим параметром, таким как $ TABLE и $ DATA?

dgig 18.05.2018 19:50

можешь привести пример?

dervil 18.05.2018 19:52
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
68
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Возможно, что-то вроде этого.

Я убрал его, чтобы он был немного менее подробным, дайте мне знать, если он неясен. Но главное - просто разрешить выбор соединения быть параметром, как ТАБЛИЦА и ДАННЫЕ, вызывая его с помощью 'A' или 'B'.

static public function _createTable($TABLE,$DATA) 
{           
    $SQL = "CREATE TABLE {$TABLE}"; 
    $SQL. = " (";
    foreach($DATA as$key) 
    {
        $SQL.=$key.","; 
    }           
    $SQL=rtrim($SQL,","); 
    $SQL.= ") "; 
    return $SQL; // edit, added this           
}
static public function createTable($CONN,$TABLE,$DATA) 
{       
    switch($CONN){
      case 'A':
        $conn = self::getConnectionA();
        break;
      case 'B':
        $conn = self::getConnectionB();
        break;
    }
    $sql=self::_createTable($TABLE,$DATA);           
    $result=$conn->query($sql);
    mysqli_close($conn); 
    return (bool) $result;           
}

Я заметил одну вещь - у вас был mysqli_close после вашего return - но в этом случае вы никогда не дойдете до него. Это должно быть раньше.

dgig 18.05.2018 20:01

а ты думаешь с ним будет работать ?? $ tablaA = ManagerBD :: createTableA ($ tableA, array ("id int AUTO_INCREMENT", "PRIMARY KEY (id)")); $ tableB = ManagerBD :: createTableB ($ tableB, array ("id int AUTO_INCREMENT", "PRIMARY KEY (id)"));

dervil 18.05.2018 20:09

Я имею в виду, что вы должны приспособить его к новому коду. Что-то вроде: $tablaA = ManagerBD::createTable('A', $table, array( "id int AUTO_INCREMENT", "PRIMARY KEY (id)"));

dgig 18.05.2018 20:17

ну, вам придется дать мне немного больше информации, чем это.

dgig 18.05.2018 21:03

Думаю тут какая-то ошибка $sql=self::_createTable($TABLE,$DATA);

dervil 18.05.2018 21:06

Вы видели, что я добавил подчеркивание в начало? Или они оба назвали createTable? Вероятно, его следует переименовать в нечто лучшее, например, «prepareSql» или что-то в этом роде.

dgig 18.05.2018 21:11

Я вижу это, но возвращаю ложь

dervil 18.05.2018 21:13

Вам, вероятно, следует вставить что-нибудь, чтобы выявлять и отображать любые ошибки SQL.

dgig 18.05.2018 21:24

вот так static public function getConnectionA() { require"db.php"; $conn=$connection; if (mysqli_connect_errno()) { $conn_errno=mysqli_connect_errno(); $conn_error=mysqli_connect_error(); echo$conn_errno."<br />".$conn_error; return false; } else { return$conn; } }

dervil 18.05.2018 22:04

как насчет синтаксиса CREATE TABLE?

dgig 18.05.2018 22:12

это проблема с тем, что я писал ранее, где замена $SQL = "INSERT INTO {$TABLE}"; $SQL. = " ("; foreach($DATA as$key=>$val) { $SQL.=$key.","; } $SQL=rtrim($SQL,","); $SQL. = ") "; $SQL. = "VALUES"; $SQL. = " ("; foreach($DATA as$val) { $SQL. = "".$val.","; } $SQL=rtrim($SQL,','); $SQL.= ")"; $result=$conn->query($SQL); на этот $sql=self::_createTable($TABLE,$DATA); в функции createTable все работает

dervil 18.05.2018 22:23

Нашел, отсутствует return $SQL;

dervil 18.05.2018 22:29

Другие вопросы по теме