我的mysql中有一个奇怪的问题,它发生在特定的桌子上!
我有一个数据库类,如下所示...
// Class: Database
class Database {
private $_connection;
private static $_instance; //The single instance
private $_error = '';
/*
SingleTon function to return DB Instance.
*/
public static function getInstance() {
if(!self::$_instance) { // If no instance then make one
self::$_instance = new self();
}
return self::$_instance;
}
// Constructor
private function __construct() {
global $db_host;
global $db_username;
global $db_password;
global $db_database;
$this->_connection = new mysqli($db_host, $db_username, $db_password, $db_database);
// Error handling
if(mysqli_connect_error()) {
$this->_error = "Failed to conencto to MySQL: " . mysql_connect_error();
}
}
// Get mysqli connection
public function getConnection() {
return $this->_connection;
}
}
?>
在我的其他类中,我需要数据库操作,我确实在构造函数上使用以下内容...
$db = Database::getInstance();
$this->mysql = $db->getConnection();
之后,我使用 $this->mysql->query("INSERT_QUERY") 插入数据。最后我使用 $this->mysql->insert_id 来查看插入是否成功返回了 id......在我执行插入时,我确实获得了成功的自动递增 ID 作为输出。但是如果我通过 PHPMyAdmin 工具看到数据库,数据库是空的!即使在选择查询中,我也一无所获...但是如果我保留插入数据,我确实会得到自动递增值的输出!
更多关于这种情况只发生在一个表中。很少有其他表可以执行相同的插入操作,并且可以正常工作!
所有表都在INNODB引擎上。
只是为了测试我确实删除了该特定表,但仍然得到了相同的自动递增值,并且没有错误消息,该表不存在!!但是如果我更改数据库名称,它会抛出错误,确认连接指向同一数据库。
这真的很奇怪...有人遇到类似的问题吗?
检查是否从连接更改自动提交功能。 也许在关闭连接后发生了rollback
。
$this->mysql->autocommit(true);