![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 Pomógł: 0 Dołączył: 13.03.2015 Ostrzeżenie: (0%) ![]() ![]() |
Witajcie! Przerabiam aktualnie książkę "PHP5 - zaawansowane programowanie", utknąłem już na początkowym przykładzie.
Skrypt przy użyciu funkcji __destruct() miał zastępować wpis w bazie PostgreSQL. Chciałem przerobić to na wersję z mySQL, jednakże utknąłem w pewnym momencie: $sql = 'UPDATE artykul SET' ; $sql .= 'nazwa = '.mysqli::escape_string($this->name); $sql .= 'opis = '.mysqli::escape_string($this->description); $sql .= 'WHERE nr_artykulu ='.$this->id; Z manuala PHP niewiele wyłapałem, po prostu nie wiem jak to ugryźć. Tutaj zarzucam całym kodem: CODE <meta charset="UTF-8">
<?php class Widget { private $id; private $name; private $description; private $hDB; private $needsUpdating = false; public function __construct($widgetID) { $this->hDB = new mysqli( 'localhost', 'root', '', 'php5' ); if (mysqli_connect_errno()) { printf("Brak połączenia z serwerem MySQL. Kod błędu: %s\n", mysqli_connect_error()); exit; } $sql = "SELECT nazwa, opis FROM artykul WHERE nr_artykulu = $widgetID"; $result = mysqli_query($this->hDB, $sql); if(!$result) { die('Nie można obsłużyć zapytania mysql_query!'); } if(!mysqli_num_rows($result)) { die('Szukanego artykułu nie ma w bazie!'); } $data = mysqli_fetch_array($result); $this->id = $iwdgetID; $this->name = $data["nazwa"]; $this->description = $data["opis"]; } public function getName() { return $this->name; } public function getDescription() { return $this->description; } public function setName($name) { $this->name = $name; $this->needsUpdating = true; } public function setDescription($description) { $this->description = $description; $this->needsUpdating = true; } public function __destruct() { if(!$this->needsUpdating) { return; } $sql = 'UPDATE artykul SET' ; $sql .= 'nazwa = '.mysqli::escape_string($this->name); $sql .= 'opis = '.mysqli::escape_string($this->description); $sql .= 'WHERE nr_artykulu ='.$this->id; $result = mysqli_query($this->hDB, $sqli); if(!$result) { die('Nie można zaktualiować bazy danych!'); } mysqli_close($this->hDB); } } try { $objWidget = new Widget(0); print 'Nazwa artykułu: '.$objWidget->getName()."<br>\n"; print 'Opis artykułu: '. $objWidget->getDescription()."<br>\n"; $objWidget->setName('Trampki'); $objWidget->setDescription('Trampki o dużym przebiegu!'); } catch (Exception $e) { die("Wystąpił problem: ".$e->getMessage()); } ?> Ten post edytował Remz 13.03.2015, 21:17:17 |
|
|
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Problem z OOP nie ma zadnego zwiazku. PRzenosze.
Kod PHP wklada sie w bbcode PHP a nie CODE |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 1 Dołączył: 9.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
Ale co się dzieje? Nie działa? Wywala błędy? Na pierwszy rzut oka, to Twoje zapytanie będzie miało złą składnię, powinno być raczej:
Upewnij się, że $this->id jest liczbą, jeśli może być dowolnym stringiem, to daj to też w cydzusłowia. Czyli braki w spacjach i cudzysłowiach. Nie korzystałem z mysqli od wik wików, ale doc mówi że funkcja mysqli::escape_string powinna istnieć. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 28.08.2025 - 20:12 |