0

The logger shows that I have connected to the database, but I cannot query to it correctly or add tables because I get "Master Table Failed" then "Player is not in database" then "Could not add entry" and then "Player is not in database" when I join the game so it's clearly an error on my part with MySQL. If someone could point me in the right direction that would be great!

<?php

namespace gladiusdata;

use pocketmine\plugin\PluginBase;
use pocketmine\level\particle\FloatingTextParticle;
use pocketmine\math\Vector3;
use pocketmine\utils\TextFormat;
use gladiusinfo\AnnounceTask;
use gladiusinfo\gladiusinfo;
use pocketmine\utils\Config;
use pocketmine\event\Listener;
use pocketmine\event\player\PlayerJoinEvent;

class Main extends PluginBase implements Listener
{
    private $db;

    public function onEnable()
    {
        $this->getServer()->getPluginManager()->registerEvents($this, $this);

        $user = /*username*/;
        $pass = /*password*/;
        $server = /*server*/;
        $database = /*database*/;
        $port = /*port*/;

        $this->db = @mysqli_connect($server, $user, $pass, $database, $port);
        if(!$this->db)
        {
            $this->getServer()->getLogger()->info(TextFormat::RED . "Did not work");
        } else {
            $this->getServer()->getLogger()->info(TextFormat::GREEN . "Worked!");
        }

        if($this->db->query("CREATE TABLE IF NOT EXISTS master (player TEXT PRIMARY KEY COLLATE NOCASE, rank TEXT, bal INTEGER);"))
        {
            $this->getServer()->getLogger()->info(TextFormat::GREEN . "Created master table");
        } else {
            $this->getServer()->getLogger()->info(TextFormat::RED . "Master table failed");
        }
    }

    public function onPlayerJoin(PlayerJoinEvent $pje)
    {
        $this->insert($pje->getPlayer()->getName());
    }

    public function insert($player, $rank = "none", $bal = 0)
    {
        if(!$this->playerExists($player))
        {;
            $sql = "INSERT INTO master (player, rank, bal) VALUES ($player,                 $rank, $bal)";
            if($this->db->query($sql))
            {
                $this->getServer()->getLogger()->info(TextFormat::GREEN . "Added new entry successfully");
            } else {
                $this->getServer()->getLogger()->info(TextFormat::RED . "Could not add entry");
            }
        }
        $this->playerExists($player);
    }

    public function playerExists($player)
    {
        $result = $this->db->query("SELECT * FROM master WHERE player='$player'");
        if($result)
        {
            $this->getServer()->getLogger()->info(TextFormat::GREEN . "Player is in database!");
        } else {
            $this->getServer()->getLogger()->info(TextFormat::RED . "Player is not in database!");
        }
    }
}
  • Have you tried to run the command to create the master table manually through the mysql command prompt? Does it error there as well? If so, what error does it throw? – kittykittybangbang Jun 30 '15 at 04:10

1 Answers1

0

Your table is not creating because TEXT column is set to primary key. You can't set TEXT column as primary key. The error is

ERROR 1170 (42000): BLOB/TEXT column 'name' used in key specification without a key length

for more information see the links-

MySQL error: key specification without a key length

MySQL error: key specification without a key length

Community
  • 1
  • 1
Hitesh Mundra
  • 1,538
  • 1
  • 9
  • 13