2013-09-12 2 views
-1

Ниже приведен код, который отлично работает, однако он использовал mysql_ *, и я больше этого не хочу. Я попытался переделать этот раздел в mysqli, но он не работает. Я могу опубликовать весь свой код, если вы пожелаете, но я уверен, что знаю, где проблема. Ниже приведен код:Переключение с mysql на mysqli

Старый:

public function verifyDatabase() 
    { 
     include('dbConfig.php'); 

     $data = mysql_query("SELECT client_id FROM clients WHERE client_email_address = '{$this->_username}' AND client_password = '{$this->_pass_sha1}'"); 

     if(mysql_num_rows($data)) 
     { 
      list($this->_id) = @array_values(mysql_fetch_assoc($data)); 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 

Новое:

public function verifyDatabase() 
    { 
     include('dbConfig.php'); 

     $data = $db->prepare("SELECT client_id FROM clients WHERE client_email_address = ? AND client_password = ? LIMIT 1"); 
     $data->bind_param($this->_username, $this->_pass_sha1); 
     $data->execute(); 
     $data->store_result(); 

     if($data->num_rows) 
     { 
      list($this->_id) = @array_values($data->fetch()); 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 

Я все еще учусь MySQLi и не совсем готовы к PDO вещи, как я обнаружил, что немного сбивает с толку. Как я уже сказал, весь этот скрипт отлично работает с mysql_ *, но не столько с mysqli. Когда я пытаюсь войти в мою форму, она не отображает никаких ошибок и не выводит ее на следующую страницу, поэтому я знаю ее этот бит, который является вопросом

+0

Что именно не работает? –

+1

Ну, вы также можете избежать подавления ошибок с помощью '@'. – Sammitch

+0

Я предполагаю, что ваше имя пользователя более 16 символов? Новый стандарт позволяет использовать имена пользователей из 16 символов или меньше. – Rottingham

ответ

0

рекомендуется использовать вспомогательную функцию, либо со старым MySQL или современной MySQLi

public function verifyDatabase() 
{ 
    $sql = "SELECT client_id FROM clients WHERE email = ? AND password = ?"; 
    return $this->db->getOne($sql ,$this->_username,$this->_pass_sha1); 
} 

отметить также, что dbConfig.php не должны быть включены в каждый метод, но, но только один раз. Хотя обработчик DB должен быть назначен переменной класса в конструкторе.

-1

Измените свой код на это. Я не говорю, что это исправит проблемы, но будет лучше.

public function verifyDatabase() 
{ 
    include('dbConfig.php'); 

    $data = $db->prepare("SELECT client_id FROM clients WHERE client_email_address = ? AND client_password = ? LIMIT 1"); 
    $data->bind_param($this->_username, $this->_pass_sha1); 
    $data->execute(); 
    $data->store_result(); 

    if($data->num_rows > 0) 
    { 
     $result = $data->fetch(); 
     $this->_id = $result['client_id']; 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

Вы также можете поместить var_dump ($ result); после $ result = $ data-> fetch(); чтобы распечатать то, что именно возвращается.

+0

Добавили код, но не исправили проблему с захватом id –

+0

Вы пытались поместить var_dump ($ result) ПОСЛЕ $ resule = $ data-> fetch(); линия? Это покажет вам, что именно вы выбрали для БД. – Rottingham

+0

да, и это ничего мне не показалось, как буквально ничего –

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