Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework]Insert do bazy
Forum PHP.pl > Forum > PHP > Frameworki
Mlodycompany
Witam. Otóż mam kolejny problem z kilkoma tabelami w 1 klasie.
  1. class Training extends Zend_Db_Table {
  2. public $_name = 'szkolenia';
  3. public $_name2 = 'szkolenia-graczy';
  4. public function startTrain($idT, $idG, $level){
  5. $data = array(
  6. 'ID'=>''
  7. );
  8.  
  9. $this->insert($this->_name2, $data);
  10. }

i dostaje taki błąd:
Kod
Catchable fatal error: Argument 1 passed to Zend_Db_Table_Abstract::insert() must be an array, string given...

I tu jest dziwna rzecz. A mianowicie manual mówi że nazwa tabeli to string, a tutaj błąd głosi że 1 parametr musi być tablicą. Jak umieszczę nazwę tabeli w tablicy zwraca błąd
Kod
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column '0' in 'field list''...
a jak zmienie nazwę na
  1. $this->_name
i użyje jako stringa to zadziała. Wiecie może co jest nie tak?
melkorm
Przeczytaj dokładnie manual Zend'a, kompletnie nie wykorzystujesz potencjału tego framework'a.

Jeżeli masz tak pisać zapytania które nawet w takim przypadku nie są poddawana filtracji przeciwko SQLInjection to pisze je z palca.

  1. /**
  2.   * Inserts a new row.
  3.   *
  4.   * @param array $data Column-value pairs.
  5.   * @return mixed The primary key of the row inserted.
  6.   */
  7. public function insert(array $data)
  8. {
  9. // kod funkcji
  10. }


Taka jest przyczyna Twojego błędu.

P.S.
Rozbij to na dwa modele i ich używaj poprawnie czyli:
  1. $R_Row = $this->createRow($data);
  2. $R_Row->foo = 'bar';
  3. $R_Row->save();


I jest ładnie przejrzyście i z filtracją.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.