记录器显示我已经连接到数据库,但我无法正确查询或添加表,因为当我加入游戏时,我会得到"主表失败"、"玩家不在数据库中"、"无法添加条目"answers"玩家不进库",所以这显然是MySQL的错误。如果有人能为我指明正确的方向,那就太好了!
<?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!");
}
}
}
因为TEXT列设置为主键,所以没有创建表。不能将TEXT列设置为主键。错误为
ERROR 1170 (42000): BLOB/TEXT column 'name' used in key specification without a key length
有关更多信息,请参阅链接-
MySQL错误:密钥规范没有密钥长度
MySQL错误:没有密钥长度的密钥规范