Частный метод PHP не является параметром

Я хочу сделать класс, который будет показывать случайные данные из базы данных и подсчитывать, сколько раз они были показаны.

Последовательность следующая.

  1. Я беру случайные данные из базы данных.
  2. Я увеличиваю количество просмотров.
  3. Я показываю взятые (и увеличенные) данные на странице.

Мой код:

class Translate

private $db ;
private $result ;
private $foreign;
private $translation;

function __construct()
{
    $this->db = new PDO('mysql:host=localhost;dbname=translate;charset=utf8', 'root', '');
}

private function increaseView($word)   
{
    $sql = $this->db->prepare("UPDATE admin_words SET was_shown = was_shown + 1  WHERE in_english=   ' " . $word . " ' ");
    $sql->execute();        
}

public function getNewWord()
{
    $this->result = $this->db->query('SELECT * FROM admin_words ORDER BY RAND() LIMIT 1');
    $this->result = $this->result->fetchAll();

    // next string is not working
    $this->increaseView('book');

    return $this->result;
} 

Я использую это следующим образом:

$word = new Translate();
$texts = $word->getNewWord();

Проблема не в $ текстах. Это прекрасно работает. Но я не могу отправить параметр в

private function increaseView($word)    
{
    $sql = $this->db->prepare("UPDATE admin_words SET was_shown = was_shown + 1  WHERE in_english=   ' " . $word . " ' ");
    $sql->execute();        
}

от

// next string is not working
$this->increaseView('book');

Текущее поведение: мои случайные данные также отображаются, но увеличение количества не происходит. Любые ошибки отображаются. Но если я использую $sql = $this->db->prepare("UPDATE admin_words SET was_shown = was_shown + 1 WHERE in_english= 'book' ");"книга" вместо переменной обновляет таблицу (работает хорошо)

Что я делаю не так?

1 ответ

Решение

Во-первых, вы можете использовать подготовленный оператор с bindParam в отличие от встраивания переменных непосредственно в SQL - хотя может быть мало возможностей для внедрения SQL. Метод обновления increaseView следует использовать значение, возвращаемое из запроса выбора, если нет - возможно, так?

class Translate{

    private $db;
    private $result;
    private $foreign;
    private $translation;

    function __construct()
    {
        $this->db = new PDO('mysql:host=localhost;dbname=translate;charset=utf8', 'root', '');
    }

    private function increaseView($word)   
    {
        $sql = $this->db->prepare("UPDATE admin_words SET was_shown = was_shown + 1 WHERE in_english=:word");
        $sql->bindParam( ':word', $word );
        $sql->execute();        
    }

    public function getNewWord()
    {
        $this->result = $this->db->query('SELECT * FROM admin_words ORDER BY RAND() LIMIT 1');
        $this->result = $this->result->fetchAll();
        $this->increaseView( $this->result['in_english'] ); /* is this the field / column ?? */
        return $this->result;
    }
}

$word = new Translate;
$texts = $word->getNewWord();
Другие вопросы по тегам