Частный метод PHP не является параметром
Я хочу сделать класс, который будет показывать случайные данные из базы данных и подсчитывать, сколько раз они были показаны.
Последовательность следующая.
- Я беру случайные данные из базы данных.
- Я увеличиваю количество просмотров.
- Я показываю взятые (и увеличенные) данные на странице.
Мой код:
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();