konto usunięte

Temat: Jak w Zendzie zrzutować 0 na '0' żeby zrobić update ?

Mam checkboxa i wiadomo jeśli zaznaczę to mam wartość 1 a jeśli odznaczę to wartość 0

jak wpisuje w bazie

UPDATE tabela SET is_abc = '0' where id = 1; to ten kod działa ok
ale jak wpisze
UPDATE tabela SET is_abc = 0 where id = 1; to wywala błąd

W kodzie mam:

$varData = array('is_abc' => $parName);
$varWhere = array('id' => '.$parId.');
$this->objDB->update('tabela', $varData, $varWhere);

I w $parName mam wartość 0 lub 1 ale jako int a chciałbym to zrzutować na txt
Jest cos wbudowanego w mechanizm zenda ?
Piotr Jankowski

Piotr Jankowski Software Development
Specialist

Temat: Jak w Zendzie zrzutować 0 na '0' żeby zrobić update ?

Rzutowanie między typami odbywa się w PHP przez tzw. castingi, czyli gdy np. mamy zmienną typu "integer" o nazwie $varName, "rzutowanie" jej na typ "string" (wspomniany w pytaniu, mocno kolokwialnie, "txt") wyglądałoby następująco:


$varName = (string) $varName;


Uważam jednak, że nie tutaj kod kwiczy. MySQL (zakładam, że z niego korzystasz) sam rzutuje liczby używane w kontekście ciągu znaków na string i odwrotnie (dokładnie nie pamiętam od której wersji). Pozwolę sobie wszystko streścic w punktach:

1. Co znaczy "wpisuję w bazie"? Z terminala lub PhpMyAdmina, z wykorzystaniem wspomnianego kodu w PHP, czy chodzi o bezprośrednie wykonanie zapytania do bazy w PHP w postaci pure SQL'a? Jeżeli PHP - podaj komunikat błędu (Zend musi działać w środowisku deweloperskim wtedy, modyfikowalne w index.php).

2. Czy zanim wartość jest przekazywana do adaptera bazy danych Zenda sprawdzasz czy FAKTYCZNIE checkbox został zaznaczony i czy czasem nie przypisujesz nulla do "is_abc"? (checkboxy NIE zaznaczone NIE są przekazywane do $_POST w momencie wysyłki formularza - oczywiście wszystko zależy od tego jak je pobierasz, rozpatruje najprostszy scenariusz z wykorzystaniem $this->getRequest()->getPost('nazwa-parametru'). Jeżeli checkbox nie jest zaznaczony, wtedy funkcja ta zwrata null).

To tyle w kwestii pobierania danych z POSTa. Załóżmy hipotetycznie, że wszystkie dane są przekazywane prawidłowo do metody obsługującej to zapytanie do bazy. Przejrzałem szybko kod i dokumentację Zenda i rzucają się w oczy pewne błędy (zgodnie z dokumentacją do wersji 1.12, dotyczącej adaptera bazy danych i update'ów, dostępną tutaj):

1. O ile $varData jest prawidłowo zdefiniowane, to $varWhere wydaje się nie. $varWhere = array('id' => '.$parId.') przypisze do $varWhere literał będacy tablicą asocjacyjną z indeksem 'id' o wartości '.$parId.' - dosłownie '.$parId.', nie zostanie tam podstawiona wartość zmiennej $parId.

2. $varWhere nie jest zdefiniowane poprawnie zgodnie z zamieszczoną na stronie Zend'a dokumentacją.

Rozwiązaniem tego problemu byłby zapis $varWhere w następującej formie:

$varWhere = array('id = ?' => $parId);


Or so I think.Piotr Jankowski edytował(a) ten post dnia 28.02.13 o godzinie 17:30

konto usunięte

Temat: Jak w Zendzie zrzutować 0 na '0' żeby zrobić update ?

Właśnie zgubiłem ten znak '?' używam postgresa

Następna dyskusja:

Redirect to external link z...




Wyślij zaproszenie do