Я создаю страницу входа/регистрации с PHP и MySQL, все работает нормально, но когда я пытаюсь восстановить insert_id из MySQL, просто не работает. Даже если я пытаюсь «печать» в результате, это говорит только 1. Heres мой код:Mysqli-> insert_id ничего не возвращает
Вот мое подключение:
<?
class Connection { //Connect to database
/* Arguments */
private $_host = "localhost";
private $_username = ""; /* Change */
private $_password = ""; /* Change */
private $_database = "";
private $_connection;
private static $_instance;
/* Methods */
private function __construct(){ //Initial method
$this->_connection=new mysqli($this->_host,$this->_username,$this->_password,$this->_database);
if($this->_connection->connect_error){
trigger_error("Error al conectar a base de datos: " . $this->_connection->connect_error);
}
$this->_connection->set_charset("utf8");
}
private function __clone(){} //Magic method
public static function getInstance(){ //Get instance of connection
if(!self::$_instance){
self::$_instance=new self();
}
return self::$_instance;
}
public function getConnection(){ //Get MySQLi connection
return $this->_connection;
}
}
class Query extends Connection { //Query database
public static function run($sql){
return parent::getInstance()->getConnection()->query($sql);
}
}
?>
И вот мой пользователи класс:
<?
class Users {
/* Arguments */
public static $result=NULL;
/* Methods */
public static function getDuplicated($sql){ //Get duplicated records
$d=Query::run($sql);
self::$result=$d->num_rows;
}
public static function createUser($sql){ //Create new user on database
$c=Query::run($sql);
self::$result=$c->insert_id;
}
}
?>
И, наконец, это где я называю INSERT:
<?
Users::$result=NULL;
$c=Users::createUser("INSERT INTO users (user,password,lastLogin) VALUES ('$username_register','$password_register',NOW())");
echo Users::$result;
?>
Как я уже сказал, все работает просто отлично, я могу получить записи из базы данных , он вставляет правильно и так далее, но когда я вставляю идентификатор пользователя, он просто ничего не дает.
Надеюсь, этого достаточно, чтобы вы могли мне помочь и благодарить заранее!
Ваша структура класса просто ужасна. –
Поскольку вы уже создали свой собственный ORM к этому моменту, вы оценили с помощью [Doctrine] (http://www.doctrine-project.org/), [Propel] (http://propelorm.org/) или [Eloquent] (https://laravel.com/docs/5.3/eloquent) вместо этого? Они проверены, проверены и хорошо поддерживаются. – tadman
** ПРЕДУПРЕЖДЕНИЕ **: при использовании 'mysqli' вы должны использовать [параметризованные запросы] (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) и [' bind_param'] (http://php.net/manual/en/mysqli-stmt.bind-param.php), чтобы добавить данные пользователя в ваш запрос. ** НЕ используйте ** интерполирование строк или конкатенацию для выполнения этого, потому что вы создали серьезную [SQL-инъекцию] (http://bobby-tables.com/). ** НИКОГДА не ставьте данные '$ _POST' или' $ _GET' непосредственно в запрос, это может быть очень вредно, если кто-то пытается использовать вашу ошибку. – tadman