sql >> Database >  >> RDS >> Mysql

Hoe programmatisch MySQL-databases te maken op gedeelde Linux-hostingplannen

Met dank aan @Alex C die me op het juiste spoor heeft gezet. Het volgende werkt met veel gedeelde hostingplannen, maar u moet eerst hun beleid hierover raadplegen. De mijne schreef me terug in een ticket voor technische ondersteuning en zei:"Je moet automatiseren via een cpanel-script." Dus dat is wat dit is.

In het onderstaande voorbeeld zou ik root.com al hebben gekocht als mijn hoofdrootdomein van mijn gedeelde hostingplan. Ik zou een database willen opzetten met de naam "user_myexample" met wachtwoord "myexample" toegewezen met volledige rechten aan gebruiker "user_myexamp". Als het voorvoegsel "user_" en "mijnvoorbeeld" er vreemd uitzien, komt dat omdat cpanel een voorvoegsel heeft dat is gebaseerd op het gebruikersaccount van de rootgebruiker in cpanel, en de gebruikersnaam van de database maximaal 7 tekens lang kan zijn.

Om verbinding te maken met Cpanel om dit mogelijk te maken, heb ik een homepage-URL van cpanel ingevoerd (die varieert met het hostingplan), zodat deze kan worden geparseerd en hergebruikt. Ik heb ook de cpanel-gebruikers-/pasgegevens van mijn root.com verstrekt.

De echo-statements zijn slechts het uitvoerantwoord, of elk HTTP GET-verzoek werkte of niet. Misschien wilt u dat inspecteren om te zien of er iets is dat u uit die uitvoer kunt ontleden voor succes/mislukking.

Let op:sommige hostingplannen blokkeren file_get_contents die verbinding maken met een URL, dus het kan zijn dat u moet overschakelen met fopen($sURL, 'r') of Curl API.

<?php

// @ input vars
$sPastedCpanelHomepageURL = 'https://root.com:2083/frontend/x3/index.html';
$sNewDB = 'myexample';
$sNewDBUser = 'myexamp'; // must be 7 chars max
$sNewDBPass = 'myexample';
$sCPanelUser = 'user';
$sCPanelPass = 'pass';

// @ processing
$sCP = dirname($sPastedCpanelHomepageURL);
$sCP = str_replace('://','://' . $sCPanelUser . ':' . $sCPanelPass . '@',$sCP);

$sPrefix = substr($sCPanelUser, 0, 7) . '_';

$sTask1 = '/sql/addb.html?';
$sTask2 = '/sql/adduser.html?';
$sTask3 = '/sql/addusertodb.html?';

$sNewDB = urlencode($sNewDB);
$sNewDBUser = urlencode($sNewDBUser);
$sNewDBPass = urlencode($sNewDBPass);
$sCPanelUser = urlencode($sCPanelUser);
$sCPanelPass = urlencode($sCPanelPass);

$sNewDBUser = substr($sNewDBUser, 0, 7);

$asData1 = array(
  'db' => $sNewDB
);
$sData1 = http_build_query($asData1);
$s = file_get_contents($sCP . $sTask1 . $sData1);
echo "$s\n";

$asData2 = array(
  'user' => $sPrefix . $sNewDBUser,
  'pass' => $sNewDBPass,
  'pass2' => $sNewDBPass
);
$sData2 = http_build_query($asData2);
$s = file_get_contents($sCP . $sTask2 . $sData2);
echo "$s\n";

$asData3 = array(
  'user' => $sPrefix . $sNewDBUser,
  'db' => $sPrefix . $sNewDB,
  'update' => '',
  'ALL' => 'ALL'
);
$sData3 = http_build_query($asData3);
$s = file_get_contents($sCP . $sTask3 . $sData3);
echo "$s\n";


  1. Hoe max_connections in MySQL Programmatisch in te stellen

  2. lastInsertId werkt niet in Postgresql

  3. XML-gegevens ontleden met behulp van php om in mysql-database te plaatsen

  4. Deel verbinding met postgres db tussen processen in Python