Есть класс подключения к базе данных:
class Mydb
{
protected $db;
public function __construct()
{
try {
$this->db = new PDO('mysql:host=localhost;dbname=mydb', 'root', '');
} catch (PDOException $e) {
exit($e->getMessage());
}
}
}
И два класса-наследника: для добавления данных в базу
class AddData extends Mydb
{
public function addInfo($name, $tel, $email)
{
$this->db->exec("INSERT INTO users (name, tel, email) VALUES ('$name', '$tel', '$email'");
}
}
и для получения из базы
class GetData extends Mydb
{
public function getInfo()
{
$this->db->query("SELECT * FROM users");
}
}
Объект класса AddData со своей функцией справляется отлично:
$add = new AddData();
$add->addInfo('Vasya', '(495) 123-45-67', 'vas@ya.ru');
А вот объект класса GetData почему-то возвращает NULL:
$get = new GetData();
$res = $get->getInfo();
var_dump($res); //NULL
Причём если $this->db->query("SELECT * FROM users"); поместить в конструктор родительского класса, то всё работает. А через класс-наследник - нет.
В чём здесь проблема и как её решить?
Я не знаю, где выучились писать классы, то что написано в вопросе - это страшнее атомной войны.
"класс" Mydb выкинуть на помойку, остальные объединить в один.
class User
{
public function __construct($pdo) {
$this->db = $pdo;
}
public function add()
{
$sql = "INSERT INTO users (name, tel, email) VALUES (?,?,?)";
$this->db->prepare($sql)->execute($name, $tel, $email);
}
public function getAll()
{
return $this->db->query("SELECT * FROM users")->fetchAll();
}
}
использовать так
$pdo = new PDO('mysql:host=localhost;dbname=mydb', 'root', '', [3 => 2]);
$user = new User($pdo);
$res = $user->getAll();
var_dump($res); //NULL
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть запрос, и в нем использую порядка 500 айдишников, перечисленных в IN