0

I'm wanting to automatically create a new DB when a new customer signs up via WHMCS. I'm attempting to use a hook to achieve this:

<?php

if (!defined("WHMCS"))
die("This file cannot be accessed directly");

function createDB($vars) {

  // connect to the MySQL server
  $conn = new mysqli('localhost', 'user', 'pass', '', 'port');

  // check connection
  if (mysqli_connect_errno()) {
    exit('Connect failed: '. mysqli_connect_error());
  }

  // sql query with CREATE DATABASE
  $sql = "CREATE DATABASE `test_db` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci";

  // Performs the $sql query on the server to create the database
  if ($conn->query($sql) === TRUE) {

  }
  else {
    echo 'Error: '. $conn->error; die;
  }
  $conn->close();
}

add_hook("AcceptOrder",1,"createDB");

Not quite sure if AcceptOrder is the proper hook or if I should do something like AfterModuleCreate. I've tried both but I seem to always get the following error:

Connect failed: Lost connection to MySQL server at 'handshake: reading inital communication packet', system error: 11

AJK
  • 391
  • 9
  • 27
  • don't create a new connection, but use WHMCS functions :`require_once __DIR__ . '/init.php'; require_once(ROOTDIR . '/includes/dbfunctions.php'); $res_create=full_query('CREATE DATABASE some_db DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci');` – houssam May 12 '20 at 07:38
  • @houssam Thanks for the reply, and that would create the DB on the new customer's account? I actually figured this out using a hook to create a new db / user in their cpanel but now I'm wondering if what I have isn't proper because I use connection – AJK May 12 '20 at 12:51
  • AcceptOrder will be executed for all Orders; https://developers.whmcs.com/hooks-reference/shopping-cart/#acceptorder it is difficult to find the 'serviceid' and 'userid'. it depends on your hosting; can your user create new DBs. how to delete the DB if the user did not pay? you need: https://developers.whmcs.com/provisioning-modules/ – houssam May 12 '20 at 17:07

0 Answers0