/** * Checks a PDO statement for errors and if any exist, the script will exist and log to the error log * * @param $statement PDOStatement */ function check_statement($statement) { $errorInfo = $statement->errorInfo(); // If the first element is 0, it's good if ($errorInfo[0] == 0) { return; } // Some error has occurred, log it and quit error_fquit('FQUIT Statement \\"' . $statement->queryString . '" errorInfo() => ' . print_r($errorInfo, true)); }
/** * Get or create a custom column and return the id * * @param $columnName string * @return int * @deprecated */ public function getCustomColumnID($columnName, $attemptedToCreate = false) { global $master_db_handle; // Execute the query $statement = get_slave_db_handle()->prepare('SELECT ID FROM CustomColumn WHERE Name = ?'); $statement->execute(array($columnName)); // Did we get it? if ($row = $statement->fetch()) { return $row['ID']; } if ($attemptedToCreate) { error_fquit("Failed to create custom column: {$columnName}"); } // Nope... $statement = $master_db_handle->prepare('INSERT INTO CustomColumn (Plugin, Name) VALUES (:Plugin, :Name)'); $statement->execute(array(':Plugin' => $this->plugin, ':Name' => $columnName)); return $this->getCustomColumnID($columnName, true); }
/** * Get a server by its GUID. If not found, this will create it. * @param $guid * @param $attemptedToCreate */ public function getOrCreateServer($guid, $attemptedToCreate = false) { global $master_db_handle; // Try to select it first $statement = get_slave_db_handle()->prepare('SELECT Server.ID, GUID, ServerVersion, Country, Hits, Created, ServerSoftware, MinecraftVersion, Players, Plugin, ServerPlugin.Version, ServerPlugin.Updated FROM Server LEFT OUTER JOIN ServerPlugin ON ServerPlugin.Server = Server.ID WHERE GUID = :GUID'); $statement->execute(array(':GUID' => $guid)); // The server object $server = null; while ($row = $statement->fetch()) { if ($server === null) { $server = new Server(); $server->setID($row['ID']); $server->setPlugin($this->id); $server->setGUID($row['GUID']); $server->setCountry($row['Country']); $server->setPlayers($row['Players']); $server->setServerVersion($row['ServerVersion']); $server->setHits($row['Hits']); $server->setCreated($row['Created']); $server->setServerSoftware($row['ServerSoftware']); $server->setMinecraftVersion($row['MinecraftVersion']); $server->setModified(false); } if ($row['Plugin'] == $this->id) { $server->setCurrentVersion($row['Version']); $server->setUpdated($row['Updated']); $server->setModified(false); return $server; } } // Do we need to add the plugin? if ($server !== null) { $statement = $master_db_handle->prepare('INSERT INTO ServerPlugin (Server, Plugin, Version, Updated) VALUES (:Server, :Plugin, :Version, :Updated)'); $statement->execute(array(':Server' => $server->getID(), ':Plugin' => $this->id, ':Version' => '', ':Updated' => time())); $server->setUpdated(time()); $server->setModified(false); // Return the server object return $server; } // Did we already try to create it? if ($attemptedToCreate) { error_fquit($this->name . ': Failed to create server for "' . $guid . '"'); } // It doesn't exist so we are going to create it ^^ $statement = $master_db_handle->prepare('INSERT INTO Server (GUID, Players, Country, ServerVersion, Hits, Created) VALUES(:GUID, :Players, :Country, :ServerVersion, :Hits, :Created)'); $statement->execute(array(':GUID' => $guid, ':Players' => 0, ':Country' => 'ZZ', ':ServerVersion' => '', ':Hits' => 0, ':Created' => time())); // reselect it return $this->getOrCreateServer($guid, true); }