2016-10-24 2 views
-1

Я создаю страницу входа/регистрации с 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; 
?> 

Как я уже сказал, все работает просто отлично, я могу получить записи из базы данных , он вставляет правильно и так далее, но когда я вставляю идентификатор пользователя, он просто ничего не дает.

Надеюсь, этого достаточно, чтобы вы могли мне помочь и благодарить заранее!

+1

Ваша структура класса просто ужасна. –

+0

Поскольку вы уже создали свой собственный ORM к этому моменту, вы оценили с помощью [Doctrine] (http://www.doctrine-project.org/), [Propel] (http://propelorm.org/) или [Eloquent] (https://laravel.com/docs/5.3/eloquent) вместо этого? Они проверены, проверены и хорошо поддерживаются. – tadman

+0

** ПРЕДУПРЕЖДЕНИЕ **: при использовании '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

ответ

2

Вы вызываете insert_id в результате mysqli::query (что равно mysqli_result). Вы должны называть его на объекте mysqli.

Вам придется реорганизовать свой код. Возможно, что-то вроде:

class Query extends Connection { //Query database 
    ... 
    public static function lastInsertedId() 
    { 
     return parent::getInstance()->getConnection()->insert_id; 
    } 
} 

... 

$c=Query::run($sql); 
echo Query::lastInsertedId(); 
+0

Спасибо, позвольте мне проверить, работает ли это, и я буду держать вас в курсе! : D –

+0

Итак, я сделал то, что вы мне сказали, и ЭТО РАБОТАЛО !!! Большое спасибо :) –

Смежные вопросы