PDO не коррелирует параметры, установленные с помощью bindParam () и в методе с использованием $ args возвращает пустой массив - PullRequest
0 голосов
/ 12 марта 2019

Чего я пытаюсь достичь:

Пояснение:

Я создаю простой процесс, в котором мой класс 'Content' преобразует массив в объекты и распечатывает их на моей веб-странице, как они называются.

Ожидаемый результат:

$ stmt PDO будет связывать параметры, используя $ stmt-> bindParam (). Переменные связывания соответствуют $ args в конструкции. Затем передайте массив статическому методу, который преобразует массив в объекты.

Результат

Используя print_r (), я могу отследить результаты своего PDO до стадии преобразования в $ object. Я отмечу результат в комментариях в конце кода.

  1. По мере продвижения по результатам print_r () возвращает имена столбцов базы данных, а не имена переменных bindPram ().
  2. В конце концов, на моей веб-странице отображается пустой массив.

Мне кажется, что мой bindParams () не работает в моем PDO. Сам PDO работает, потому что я могу выбирать и печатать из базы данных. Я не уверен, что я сделал неправильно.

Мой код

<?php

class Content {

// --- START OF ACTIVE RECORD CODE ---

public $n_id;  // bind with column name 'nid'  in database
public $n_text; //bind with column name 'ntext' in database


// instantiating a STATIC Database Connection for the class to use
static protected $database;

static public function set_database($database) {
  self::$database = $database;
}

// constructing arguments
public function __construct($args=[]) {

  $this->n_id = $args['n_id'] ?? '';
  $this->n_text = $args['n_text'] ?? '';

}

// Multi use method to pass in sql that will execute the PDO only two parameters are bound nid and ntext.

static public function look_all_sql($sql) {

// -------------BEGIN PDO-----------

// checking to ensure PDO extensions are loaded

if (!extension_loaded ('PDO' )) {
    echo 'PDO is NOT loaded!'."\n";
    if (!extension_loaded('pdo_mysql')){
        echo 'PDO mysql driver is NOT loaded.'."\n";
    }
}

// preparing PDO by loading sql from method find_all(), calling db connection, and storing in variable $stmt

  $stmt = self::$database->prepare($sql);

  // Binding Parameters for sql 
  $stmt->bindParam(':nid', $n_id,  PDO::PARAM_INT);
  $stmt->bindParam(':ntext', $n_text,  PDO::PARAM_STR);

  // executing $stmt PDO and storing the result in $stmt
  $stmt->execute();


// ------------END PDO ----------

  // Checking to see if a result exist. If no result is stored in $stmt, then it will echo "Database query failed." If result is stored, then the method will continue 

if(!$stmt) {
    exit("Database query failed.");
  }

// -------- BEGIN TURNING RESULTS INTO OBJECTS --------
$object_array = [];

  // The result $stmt will be stored in the variable $record

  while($record = $stmt->fetch(PDO::FETCH_ASSOC)) {


// passing $record to static method instantiate() to be converted to an object and returned as $object_array

    $object_array[] = self::instantiate($record);

}
  // clearing the PDO after information is stored in $record
    $stmt->closeCursor();

  return $object_array;

// ------------ END TURNING RESULTS INTO OBJECTS --------

}
// method to test passing $sql to method look_all_sql();

static public function find_all(){

  $sql = "SELECT * FROM `ncontent`";
//passing $sql to static method 
    return self::look_all_sql($sql);

}

// --- BEGIN INSTANTIATING 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;

}



  }


}
// ----- END INSTANTIATING OF RECORD TO CREATE OBJECTS ---

// ---END OF ACTIVE RECORD CODE---



}


?>

Что заполнено на веб-странице без print_r

Ничего не пусто.

Результаты на основе print_r:

При возврате $

$return = $stmt->fetch(PDO::FETCH_ASSOC);
 return print_r($return);
  • Отображается на странице:

Array ([0] => Array ([nid] => 2 [ntext] => Это первая строка, называемая Top Main)

На $ запись в look_all_sql ($ sql)

while($record = $stmt->fetch(PDO::FETCH_ASSOC)) {
return print_r($record);
  • Отображается на странице:

    Array ([nid] => 2 [ntext] => Это первая строка, называемая Top Main) 1

On $ record из статического метода instantiate ():

static protected function instantiate($record) {
return print_r($record);
  • Отображается на странице:

Отображение полного массива информации базы данных. Нет связанных колясок. Действует как команда fetchAll ():

Array ( [nid] => 2 [ntext] => This is the first Line called the Top Main ) Array ( [nid] => 3 [ntext] => Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor ) etc

На объекте $ в методе статического экземпляра ($ record). Количество объектов соответствует количеству объектов из моей базы данных. Тем не менее, это не коррелирует с информацией из базы данных .

$object = new self;
return print_r($object); 
  • В конце цикла foreach () получается тот же результат. Отображается на веб-странице.

    Объект содержимого ([n_id] => [n_text] =>) Объект содержимого ([n_id] => [n_text] =>) Объект содержимого ([n_id] => [n_text] =>) Примечание: преобразование массива в строку в H: \ Website \ xampp \ htdocs \ hinkleycentersandbox \ public \ includes \ maincontenttopsection.php в строке 24 Массив

В этот момент $ object должен быть возвращен в $ object_array [].

print_r на $ object_array:

  • Отображается на странице:

    Массив ([0] => [1] =>)

Код на веб-странице:

<h2><?php

    $ncontents = array(Content::find_all());

    foreach($ncontents as $ncontent) {
        echo $ncontent;
         }

    ?></h2> 
...