Вставка свойств класса PHP в качестве переменных запроса SQL в класс PHP

Я серьезный новичок, пытающийся обновить некоторый код mysqli LAMP до 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