Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: mysql::escape_string - problem.
Forum PHP.pl > Forum > PHP
Remz
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());
}
?>
nospor
Problem z OOP nie ma zadnego zwiazku. PRzenosze.

Kod PHP wklada sie w bbcode PHP a nie CODE
mathijas
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:

  1. $sql = 'UPDATE artykul SET ' ;
  2. $sql .= 'nazwa = "'.mysqli::escape_string($this->name).'",';
  3. $sql .= 'opis = "'.mysqli::escape_string($this->description).'" ';
  4. $sql .= 'WHERE nr_artykulu ='.$this->id;


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ć.
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.