• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Dlaczego PHP nie widzi bindowanych wartości?

Cloud VPS
0 głosów
175 wizyt
pytanie zadane 10 grudnia 2020 w PHP przez CSSoup Mądrala (6,460 p.)

Siemka, mam problem z tą metodą.

 public function changeBlockStatus(int $id)
  {
    try {
      $query = '
      UPDATE users
      SET isBanned = :block
      WHERE userId = : userId;';

      $this->dbh->query($query);

      $userData = $this->get($id);
      $isBanned = $userData['isBanned'];

      $this->dbh->bind(':block', !$isBanned);
      $this->dbh->bind(':userId', $id);
      $this->dbh->execute();

      return $this->dbh->getRowsAffected();
    } catch (Throwable $e) {
      throw new DataModificationException('Modyfikajca danych nie powiodła się.', 400, $e);
    }
  }

Wyrzuca mi errora, chociaż z tego co widzę to wszystko binduje dobrze.

"SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens"

Tutaj rzucę jeszcze dla pewności jak wygląda moja metoda do bindowania

public function bind(
    string $param,
    $value,
    string $type = null
  ): void {
    if (is_null($type)) {
      switch (true) {
        case is_int($value):
          $type = PDO::PARAM_INT;
          break;
        case is_bool($value):
          $type = PDO::PARAM_BOOL;
          break;
        case is_null($value):
          $type = PDO::PARAM_NULL;
          break;
        case is_string($value):
        default:
          $type = PDO::PARAM_STR;
          break;
      }

      $this->stmt->bindParam(
        $param,
        $value,
        $type
      );
    }
  }

A co do danych które chcę zbindować to do isBanned chcę przypisać wartość logiczną z resztą tak samo jest określone to w bazie.

1 odpowiedź

0 głosów
odpowiedź 11 grudnia 2020 przez Assasz Nałogowiec (30,460 p.)
$this->dbh->bind('block', !$isBanned);

zamiast

$this->dbh->bind(':block', !$isBanned);

Ponadto masz spację między : a userId w Twoim zapytaniu, ale nie jestem pewien, czy to akurat może generować błąd.

Podobne pytania

0 głosów
1 odpowiedź 124 wizyt
pytanie zadane 29 listopada 2020 w PHP przez CSSoup Mądrala (6,460 p.)
0 głosów
1 odpowiedź 216 wizyt
pytanie zadane 25 sierpnia 2020 w PHP przez Bakkit Dyskutant (7,600 p.)
0 głosów
1 odpowiedź 686 wizyt

93,457 zapytań

142,452 odpowiedzi

322,722 komentarzy

62,837 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...