Вмъкване на свойства на PHP клас като променливи на SQL заявка в рамките на PHP класа

Аз съм сериозен начинаещ, който се опитва да актуализира някои LAMP кодове на mysqli до PDO/OOP. Сигурен съм, че новият ми код е неефективен. Просто използвам този проект като учебен опит.

Опитвам се да предам няколко свойства на PHP клас към MySQL заявка, която е в рамките на метод в същия този PHP клас. Това би осъществило основно вмъкване в една mysql таблица. Опитах това, използвайки както PDO подготвени изрази, така и основния метод на PDO::query.

Когато се опитвам да вмъкна, използвайки версията на подготвените изрази на моя клас (код по-долу), получавам грешка „Извикване на членска функция bindParam() на не-обект“ на ред 27 (първият ред bindParam).

<?php
class weightInfoInsert
{

// properties
private $date;
private $weight;
private $note;
private $dbc;
private $insertQueryWithNote;
private $sth;

// methods
public function __construct($date, $weight, $note, $dbc)
    {
        $this->date = $date;
        $this->weight = $weight;
        $this->note = $note;
        $this->dbc = $dbc;
    }   

public function insertWeightWithNote()
    {
        $insertQueryWithNote = ' INSERT INTO weight (weight_date,weight,weight_note) VALUES ( :date, :weight, :note ) ';

        $sth = $this->dbc->prepare($insertQueryWithNote);
            $sth->bindParam(':date', $this->date, PDO::PARAM_STR, 8);
            $sth->bindParam(':weight', $this->weight, PDO::PARAM_STR, 5);
            $sth->bindParam(':note', $this->note, PDO::PARAM_STR);
    $this->sth->execute();
    }
}

Когато се опитвам да вмъкна с помощта на метода PDO::query() (код по-долу), получавам "синтактична грешка, неочаквано '$this' (T_VARIABLE)" на ред 23 (редът с израз на заявката).

<?php
class weightInfoInsert
{

// properties
private $date;
private $weight;
private $note;
private $dbc;
private $insertQueryWithNote;

// methods
public function __construct($date, $weight, $note, $dbc)
    {
        $this->date = $date;
        $this->weight = $weight;
        $this->note = $note;
        $this->dbc = $dbc;
    }   

public function insertWeight()
    {
        $insertQueryWithNote = ' INSERT INTO weight (weight_date,weight) VALUES ('$this->date','$this->weight','$this-note') ';
        $this->dbc->query($insertQueryWithNote);

    }

}

Въпреки че вероятно ще използвам метода на подготвените отчети, в идеалния случай бих искал да знам къде сбърках и при двата метода. Благодаря ти.


person Kevin Marshall    schedule 29.08.2015    source източник
comment
Както можете да видите от вашия пример, той ви показва, че вашите кавички са проблемът във втория клас: $insertQueryWithNote = "INSERT INTO weight (weight_date,weight) VALUES ('$this->date','$this->weight','$this-note')"; Трябва да са двойни кавички, а не единични   -  person Rasclatt    schedule 29.08.2015
comment
Това работи добре. Благодаря, че го посочихте. Малко съм объркан, тъй като имам други заявки, които са оградени в единични кавички, които работят перфектно. Те обаче не съдържат никакви променливи, така че може би това е, което прави разликата. Предполагам, че трябва да прочета най-добрите практики на PHP за единични и двойни кавички.   -  person Kevin Marshall    schedule 30.08.2015


Отговори (1)


Опитайте така, имаше синтактични проблеми с ' и $this-note трябва да е $this->note

$insertQueryWithNote = "INSERT INTO weight (weight_date,weight) VALUES ('$this->date','$this->weight','$this->note')";
person MozzieMD    schedule 29.08.2015
comment
Благодаря, както коментирах по-горе, двойните кавички накараха всичко да си дойде на мястото (след като поправих › печатната грешка). - person Kevin Marshall; 30.08.2015