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());
}
?>
<?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());
}
?>