2014-11-26 3 views
1

У меня есть экран входа, в котором пользователь вводит свое имя пользователя и пароль. Мне удалось подключиться к базе данных с помощью PDO, но я должен изменить ее на mysqli. Может кто-то, пожалуйста, помогите мне преобразовать его в mysqli. Заранее спасибо.Как преобразовать PDO в mysqli?

PDO:

<?php 
try { 
     $database = new PDO('mysql:host=localhost;dbname=myfiles', 'root', '',array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); 
     $query = "SELECT * FROM users WHERE Username = ? AND Password = ?"; 

     $userParam = array($_POST["Uname"], $_POST["Pass"]); 
     $st = $database->prepare($query); 
     $st->execute($userParam); 

     $getResults = $st->fetch(PDO::FETCH_ASSOC); 

     session_start(); 

     $_SESSION['details']['username'] = $getResults['Username']; 
     $_SESSION['details']['password'] = $getResults['Password']; 

     unset($database); 
     header("Location: index.php"); 
    } 
catch(PDOException $e) 
    { 
    print "Error!: " . $e->getMessage() . "<br/>"; 
    exit(); 
    } 
    ?> 

Mysqli (Это то, что я пытался)

<?php 

try { 

$database = mysqli_connect("localhost", "root", "", "myfiles"); 
$query = mysqli_query("SELECT * FROM users WHERE Username = ? AND Password = ?"); 

     $userParam = array($_POST["Uname"], $_POST["Pass"]); 
     $st = $database->prepare($query); 
     $st->execute($userParam); 

     $getResults = mysqli_fetch_assoc($query); 

     session_start(); 

     $_SESSION['details']['username'] = $results['Username']; 
     $_SESSION['details']['password'] = $results['Password']; 

     unset($database); 
     header("Location: index.php"); 

     } catch (Exception $e) { 
     print "Error!: " . $e->getMessage() . "<br/>"; 
     exit(); 
} 

?> 

Ошибка при запуске Mysqli код:

Warning: mysqli_query() expects at least 2 parameters, 1 given in G:\xampp\htdocs\old\drop\login.php on line 39 

Fatal error: Call to a member function execute() on a non-object in G:\xampp\htdocs\old\drop\login.php on line 43 

Update:

Mysqli

<?php 

     try { 

    $database = mysqli_connect("localhost", "root", "", "myfiles"); 
    $query = "SELECT * FROM users WHERE Username = ? AND Password = ?"; 

      $userParam = array($_POST["Uname"], $_POST["Pass"]); 
      $st = $database->prepare($query); 
      $st->execute($userParam); 

      $getResults = mysqli_fetch_assoc($st); 

      session_start(); 

      $_SESSION['details']['username'] = $getResults['Username']; 
      $_SESSION['details']['password'] = $getResults['Password']; 

      unset($database); 
      header("Location: index.php"); 

      } catch (Exception $e) { 
      print "Error!: " . $e->getMessage() . "<br/>"; 
      exit(); 
    } 

    ?> 

    "Waiting for localhost" 
+5

Это походит на шаг назад. Почему mysqli? – tadman

ответ

2

Ваша проблема здесь:

$query = mysqli_query("SELECT * FROM users WHERE Username = ? AND Password = ?"); 

    $userParam = array($_POST["Uname"], $_POST["Pass"]); 
    $st = $database->prepare($query); 
    $st->execute($userParam); 

prepare ожидает строка, mysqli_query процедурная функция, которая выполняет запрос. Удалите это. Кроме того, с mysqli вам нужно сначала привязать параметры, а не передать их execute().

$query = "SELECT * FROM users WHERE Username = ? AND Password = ?"; 

$st = $database->prepare($query); 
$st->bindParam("ss",$_POST["Uname"], $_POST["Pass"]);  
$st->execute(); 

Вот соответствующие разделы руководства:

http://php.net/manual/en/mysqli.prepare.php

http://php.net/manual/en/mysqli-stmt.bind-param.php

http://php.net/manual/en/mysqli-stmt.execute.php

+0

Привет, Jeremiah Winsley Я удалил mysqli_query, но я не могу показаться логином на индексной странице внизу, в нем говорится, что «ждет localhost». – user2994263

+0

Проверьте свой php.ini. Убедитесь, что значения для 'mysqli.default_port' и' mysqli.default_socket' установлены на те же значения, что и 'pdo_mysql.default_port' и' pdo_mysql.default_socket', и что они соответствуют настройкам в 'my.cnf' для MySQL , –

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