2015-03-17 3 views
0

Я испытываю MySQL с объектно-ориентированного PHP, поэтому я создал БД с только одна таблица называется пользователей, которые я хочу, чтобы запросить с помощью классов PHP (функция вставки правильно работает)PHP Object и MYSQL запросов

Этот мой PHP класс пользователей:

<?php 
class user{ 
    var $name; 
    var $surname; 
    var $email; 
    var $age; 
    function set_user_properties($pname, $psurname, $pemail, $page){ 
     include "include.php"; 
     $sql = "INSERT INTO users (name, surname, email, age) 
     VALUES ('$pname', '$psurname','$pemail', '$page')"; 

     if ($conn->query($sql) === TRUE){ 
      echo "New record created successfully"; 
     }else{ 
      echo "Error: " . $sql . "<br>" . $conn->error; 
     } 
     $conn->close(); 
    } 
    function get_user_properties($name){ 
     include "include.php"; 
     $sql3 = "SELECT name, surname, email, age 
     FROM users 
     WHERE name='$name'"; 
     $result3 = $conn->query($sql3); 
      if ($result3->num_rows > 0) { 
      // output data of each row 
       while($row3 = $result3->fetch_assoc()) { 
        $this->name=$row3["name"]; 
        $this->surname=$row3["surname"]; 
        $this->email=$row3["email"]; 
        $this->age=$row3["age"]; 
       } 
      } 
     $conn->close(); 
     return $this; 
    } 
} 
?> 

И это страница, на которой я хочу, чтобы прочитать все результаты запроса:

<?php 

include("class_lib.php"); 

$pname=$_POST["firstname"]; 

$user1=new user(); 
$user1->get_user_properties($pname); 
echo $user1->name; 
echo $user1->surname; 
echo $user1->email; 
echo $user1->age; 

?> 

Мой вопрос: когда я сделать запрос, который, как предполагается, более чем один результат (например, этот), как я могу передать все результаты на целевую страницу?

ответ

1

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

Итак, вопрос: «Как получить массив пользователей, а не только один?» И ответ на этот вопрос, чтобы создать класс, который выполняет DB запросы и анализирует каждую строку результатов запроса в объект пользователя

ссылающегося эту часть кода:

while($row3 = $result3->fetch_assoc()) { 
    $this->name=$row3["name"]; 
    $this->surname=$row3["surname"]; 
    $this->email=$row3["email"]; 
    $this->age=$row3["age"]; 
} 

Если добавить функцию конструктора к классу пользователя, чтобы создать экземпляр пользователя с именем, фамилией, электронная почта, и возраст, вы можете в конечном итоге с кодом в вашем классе DB, который больше похож на следующий

$users = array(); 
... 
while($row3 = $result3->fetch_assoc()) { 
    $users[] = new user($row3["name"], 
        $row3["surname"], 
        $row3["email"], 
        $this->age=$row3["age"]); 
} 
... 
return $users; 

Я надеюсь, что имеет смысл.

+0

Хорошо, я постараюсь, но когда я вызвать метод в другой странице, как я должен сделать звонок? Я имею в виду, теперь «$ user1 = new user(); $ user1-> get_user_properties ($ pname);" но тогда как это будет? – user3712139

+0

+1. Я обычно делаю это немного иначе: вместо того, чтобы иметь отдельный класс, который создает объекты 'user', у меня есть статическая функция, которая возвращает массив объектов' user' внутри самого класса –

+0

@ user3712139 Все зависит от того, как вы напишите свой код. Если вы кодируете статическую функцию в пользовательском классе, например, @James Spense, это может выглядеть как '$ users = user :: get_users();' или если вы создаете класс db для выполнения запросов, он может выглядеть как '$ db = new db(); $ users = $ db-> get_users(); ' – janamargaret

0

Спасибо всем за помощь, я решил проблему, добавив конструктор и используя метод класса. Вот код, если кто-то другой будет бороться по одной и той же проблеме.

Это class_lib.php, где определен метод все(), которые делают массив с resutus запроса:

<?php 
 
class User{ 
 
    var $name; 
 
    var $surname; 
 
    var $email; 
 
    var $age; 
 
    
 
    function __construct($pname, $psurname, $pemail, $page){ 
 
     $this->name=$pname; 
 
     $this->surname=$psurname; 
 
     $this->email=$pemail; 
 
     $this->age=$page; 
 
    } 
 

 
public static function all(){ 
 
     include "include.php"; 
 
     $users=array(); 
 
     $sql3 = "SELECT name, surname, email, age FROM users"; 
 

 
     $result3 = $conn->query($sql3); 
 
      if ($result3->num_rows > 0) { 
 
       while($row3 = $result3->fetch_assoc()) { 
 
        $users[] = new User($row3["name"],$row3["surname"], $row3["email"],$row3["age"]); 
 
       } 
 
      } 
 
     $conn->close(); 
 
     return $users; 
 
    } 
 
?>

И это код, где я вызовите метод all(). В этом случае пользователи variabile $ представляют собой массив объектов User.

<?php include("class_lib.php"); 
 
$users=User::all(); //<-- this is the call to the class method. 
 
?>