Я работаю над созданием класса контента, который будет извлекать весь контент из базы данных через PDO, затем запускать результаты через метод, который преобразует результаты в объекты, и циклически проходить через объекты, и отображать объект в конкретный модуль веб-страницы.
Что ожидается
Когда класс активирован, будет создан экземпляр, созданный через PDO, который будет извлекать необходимые данные из базы данных mysql. Затем эта информация будет отображаться и отображаться на веб-странице.
Что происходит
Я получаю без ошибок и логическое число "1", где должен быть контент. Сначала я подумал, что это ошибка SQL. Я получаю тот же результат "1", если я использую print_r ($ query_result). Смотрите мои тесты ниже.
Мой код класса ниже
<?php
class Content {
// --- START OF ACTIVE RECORD CODE ---
public $n_id;
public $n_name;
public $n_text;
public $n_photo;
// Instantiating a STATIC Database Connection for the class to use
static protected $dbconnect;
static public function database($dbconnect) {
self::$dbconnect = $dbconnect;
}
// constructing arguments
public function __construct($args=[]) {
$this->n_id = $args['n_id'] ?? '';
$this->n_name = $args['n_name'] ?? '';
$this->n_text = $args['n_text'] ?? '';
$this->n_photo = $args['n_photo'] ?? '';
}
// Multi use method to pass in sql that will execute the PDO only two parameters are bound ID and contentText.
static public function find_by_sql($sql) {
// -------------BEGIN PDO-----------
// preparing PDO by loading sql, calling db connection, and storing in variable $stmt
$stmt = self::$dbconnect->prepare($sql);
// Binding Parameters for sql
$stmt->bindParam(':nid', $n_id, PDO::PARAM_INT);
$stmt->bindParam(':nall', $n_name, PDO::PARAM_STR);
$stmt->bindParam(':ntext', $n_text, PDO::PARAM_STR);
$stmt->bindParam(':nphoto', $n_photo, PDO::PARAM_INT);
// executing $stmt PDO and storing the result in $stmt
$query_result = $stmt->execute();
return $query_result;
// clearing the PDO after information is stored in $record
$stmt->closeCursor();
// ------------END PDO ----------
// Checking to see if a result exist. If nop result is stored in $stmt, then it will echo "Database query failed."
if(!$query_result) {
exit("Query doesn't exist.");
}
// -------- BEGIN TURNING RESULTS INTO OBJECTS --------
$object_array = [];
// The result $stmt will be stored in the variable $record
while($record = $query_result->fetchAll()) {
// Taking $record and passing it to the static method instantiate() - see below. This method will return the $object_array.
$object_array[] = self::instantiate($record);
}
return $object_array;
// ------------ END TURNING RESULTS INTO OBJECTS --------
}
// method to test passing $sql to method find_all_sql();
static public function find_all(){
$sql = "SELECT * FROM nmain WHERE nid = :id AND nall = :nall AND ntext = :ntext AND nphoto = :nphoto";
return self::find_by_sql($sql);
}
// --- BEGIN INSTANTIATE METHOD TO CREATE OBJECTS ---
static protected function instantiate($record) {
$object = new self;
// Auto assign values
foreach($record as $property => $value) {
if(property_exists($object, $property)){
$object->$property = $value;
}
}
return $object;
}
// ----- END INSTANTIATE OF RECORD TO CREATE OBJECTS ---
// ---END OF ACTIVE RECORD CODE---
}
?>
**On my html webpage:**
$contents = Content::find_all();
foreach ((array) $contents as $content) {
echo $content;
}
Что я тестировал
Это вывод, который я получаю при запуске var_dump ($ stmt);
object(PDOStatement)#3 (1) { ["queryString"]=> string(119) "SELECT * FROM ndb WHERE id = :id AND nall = :nall AND ntext = :ntext AND nphoto = :nphoto" }
Если я скопирую запрос и вставлю его в myphpadmin, запрос будет выполнен с привязкой параметров.
Это вывод, если я запускаю var_dump ($ query_result):
bool(true) if I use print_r($query_result) I get "1"
Это проходит мой тест if (! $ Query_result)
Если я запускаю var_dump ($ record) или var_dump ($ query_result), я ничего не получаю. Кажется, что $ query_result, потому что это bool, не имеет массива для передачи в $ record. Поэтому нечего преобразовывать в объект. Я в недоумении. Это моя PDO привязка?