Stawiam pierwsze kroki z PDO.
Posiadam taką podstawoiwą klase, któa obsługuje mi zapytania w przyjemniejszy sposób.
U mnie wygląda to tak:
$db = new DB; $db->setParameters($dbhost, $dbname, $dbuser, $dbpass); $db->setTablePrefix($dbprefix); $db->setCharset('utf8'); $db->addValue('ilosc', "ilosc-$odejmij_ilosc", PDO::PARAM_STR); // tutaj poytrzebuje odjąc wartość $db->addValue('pole_A', $zmienna, PDO::PARAM_INT); $db->addValue('pole_B', $zmienna, PDO::PARAM_INT); $db->addValue('ID', $zmienna_ID, PDO::PARAM_INT); $db->update("tabela","ID"); //uaktualniamy wg pola ID
Teraz moja klasa:
class DB { try { $sqlQuery = "update ".self::$dbSettings["table_prefix"].$table." set ";//aktualizacja_ceny=now(), foreach (self::$sqlQueryValues as $row){ $sqlQuery .= $row["field"]." = :".$row["field"].","; } $sqlQuery .= " where $kol_klucz = :$kol_klucz ";//DODALEM LIMIT limit 1 $stmt = DB::getInstance()->prepare($sqlQuery); foreach (self::$sqlQueryValues as $row){ $stmt->bindParam(":".$row["field"], $row["value"], (int)$row["type"]); } $stmt->execute(); $stmt = null; self::$sqlQueryValues = null; return true; } catch(PDOException $e){ echo '<br><hr size=2 color=red><span style="color: red;">błąd update MySQL:<br><b>'.$e->getMessage().'</b> <br>MySQL: <i>'.$sqlQuery.'</i></span><hr size=1 color=red>'; $stmt = null; self::$sqlQueryValues = null; return false; } } "field" => $field, "value" => $value, "type" => $type ); } }
Problmeme jest to, że zapis nie funkcjonuje: $db->addValue('ilosc', "ilosc-$odejmij_ilosc", PDO::PARAM_STR);
Jak korzystałem ze zwykłych zapytań SQL w mysqli to taki zapis funckonował. Teraz dostrzegłem też, że jest PDO::PARAM_STR . W polu tym mogą też być liczby dziesiętne, więc PDO::PARAM_INT
Jak zrobić, aby $odejmij_ilosc odejmowało się od obecnej liczby w bazie danych.