Я создал статическую функцию создания таблицы и вставки, но я не знаю, как использовать их в разных базах данных. Примеры:
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);
}
Прошу конструктивного мнения по этой теме и предложений по лучшему решению, пожалуйста, примеры кода в ответах, спасибо и всего наилучшего.
можешь привести пример?






Возможно, что-то вроде этого.
Я убрал его, чтобы он был немного менее подробным, дайте мне знать, если он неясен. Но главное - просто разрешить выбор соединения быть параметром, как ТАБЛИЦА и ДАННЫЕ, вызывая его с помощью '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 - но в этом случае вы никогда не дойдете до него. Это должно быть раньше.
а ты думаешь с ним будет работать ?? $ tablaA = ManagerBD :: createTableA ($ tableA, array ("id int AUTO_INCREMENT", "PRIMARY KEY (id)")); $ tableB = ManagerBD :: createTableB ($ tableB, array ("id int AUTO_INCREMENT", "PRIMARY KEY (id)"));
Я имею в виду, что вы должны приспособить его к новому коду. Что-то вроде: $tablaA = ManagerBD::createTable('A', $table, array( "id int AUTO_INCREMENT", "PRIMARY KEY (id)"));
ну, вам придется дать мне немного больше информации, чем это.
Думаю тут какая-то ошибка $sql=self::_createTable($TABLE,$DATA);
Вы видели, что я добавил подчеркивание в начало? Или они оба назвали createTable? Вероятно, его следует переименовать в нечто лучшее, например, «prepareSql» или что-то в этом роде.
Я вижу это, но возвращаю ложь
Вам, вероятно, следует вставить что-нибудь, чтобы выявлять и отображать любые ошибки SQL.
вот так 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; } }
как насчет синтаксиса CREATE TABLE?
это проблема с тем, что я писал ранее, где замена $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 все работает
Нашел, отсутствует return $SQL;
Почему бы не сделать $ CONNECTION другим параметром, таким как $ TABLE и $ DATA?