Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

4 Stron V  < 1 2 3 4 >  
Reply to this topicStart new topic
> [PHP]MySQL setters i getters
sadistic_son
post 12.01.2023, 15:21:31
Post #21





Grupa: Zarejestrowani
Postów: 1 482
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Product:
  1. <?php
  2.  
  3. class Product
  4. {
  5.  
  6. private string $productName;
  7. private string $sku;
  8. private float $price;
  9. private string $productType;
  10. public function __construct()
  11. {
  12. $this->productName = isset($_POST['name']) ? (string) $_POST['name'] : null;
  13. $this->sku = isset($_POST['sku']) ? (string) $_POST['sku'] : null;
  14. $this->price = isset($_POST['price']) ? (float) $_POST['price'] : null;
  15. $this->productType = isset($_POST['productType']) ? (string) $_POST['productType'] : null;
  16. }
  17.  
  18. function ensureNoEmpytValues()
  19. {
  20. if (empty($this->productName) || empty($this->sku) || empty($this->price) || empty($this->productType))
  21. return false;
  22. return true;
  23. }
  24. }


Oraz ProductAdd:
  1. <?php
  2.  
  3. namespace nameOne;
  4. use Product;
  5.  
  6. class ProductAdd extends Product
  7. {
  8. private DB $db;
  9.  
  10. public function __construct(DB $db){
  11. $this->db = $db;
  12. // parent::__construct();
  13. }
  14.  
  15. public function listProperties()
  16. {
  17. $properties = $this->getDistinctProperties();
  18. return $properties;
  19. }
  20.  
  21. private function getDistinctProperties()
  22. {
  23. // $db = new DB();
  24. $this->db->query("SELECT DISTINCT type FROM property ORDER BY type ASC");
  25. $results = $this->db->resultSet();
  26. return $results;
  27. }
  28.  
  29. public function listFullProperties()
  30. {
  31. $properties = $this->getFullProperties();
  32. return $properties;
  33. }
  34. private function getFullProperties()
  35. {
  36. // $db = new DB();
  37. $this->db->query("SELECT * FROM property ORDER BY type ASC");
  38. $results = $this->db->resultSet();
  39. return $results;
  40. }
  41.  
  42. public function groupFullProperties(): array
  43. {
  44. $properties = array();
  45. foreach ($this->getFullProperties() as $row) {
  46. $property = $row['property'];
  47.  
  48. $newProperty = $row['type'];
  49. if (!isset($properties[$newProperty])) {
  50. $properties[$newProperty] = array();
  51. }
  52. $properties[$newProperty][] = [
  53. 'id' => $row['id'],
  54. 'property' => $property,
  55. 'label' => $row['label'],
  56. 'description' => $row['description']
  57.  
  58. ];
  59.  
  60. }
  61. return $properties;
  62. }
  63.  
  64. public function checkExistingSKU(string $skuToCheck)
  65. {
  66. // $db = new DB();
  67. $this->db->query("SELECT sku FROM product WHERE sku = :sku");
  68. $this->db->bind(':sku', $skuToCheck);
  69.  
  70. if ($this->db->single()) {
  71. return true;
  72. }
  73. return false;
  74. }
  75.  
  76.  
  77. public function insertNewProduct()
  78. {
  79.  
  80. /* to na razie jest zakomentowane żebym w ogóle widział jakie są błędy*/
  81. // if ($this->ensureNoEmpytValues() === false)
  82. // return false;
  83.  
  84.  
  85.  
  86.  
  87. $sku = $this->sku;
  88. $productName = $this->productName;
  89. $price = $this->price;
  90. $selectedType = $this->productType;
  91.  
  92.  
  93.  
  94. $properties = $this->groupFullProperties();
  95.  
  96.  
  97. foreach ($properties[$selectedType] as $propertyData) {
  98. $postIndex = $propertyData['property'];
  99. if (empty($_POST[$postIndex]))
  100. return false;
  101. }
  102. $queryInsertProduct = "INSERT INTO `product` (`id`, `sku`, `name`, `price`, `type`) VALUES (null, :sku, :productName , :price, :selectedType)";
  103. $this->db->query($queryInsertProduct);
  104. $this->db->bind(':sku', $sku);
  105. $this->db->bind(':productName', $productName);
  106. $this->db->bind(':price', $price);
  107. $this->db->bind(':selectedType', $selectedType);
  108.  
  109. $this->db->execute();
  110.  
  111. $lastProductId = $this->db->lastInsertId();
  112.  
  113. foreach ($properties[$selectedType] as $propertyData) {
  114.  
  115. $propertyId = (int) $propertyData['id'];
  116. $productValue = $_POST[(string) $propertyData['property']];
  117.  
  118. $queryInsertProductProperty = "INSERT INTO `product_property` (`id`, `product_id`, `property_id`, `value`) VALUES (null, $lastProductId , $propertyId, :productValue )";
  119. $this->db->query($queryInsertProductProperty);
  120. $this->db->bind(':productValue', $productValue);
  121.  
  122. $this->db->execute();
  123. }
  124.  
  125.  
  126. }
  127.  
  128. }
  129.  
  130. ?>

Przyczepia się że nie wie co to jest:
$sku = $this->sku;
$productName = $this->productName;
$price = $this->price;
$selectedType = $this->productType;

Jak w product zmienię na public to za to przyczepia się że Product::$sku must not be accessed before initialization

Ten post edytował sadistic_son 12.01.2023, 15:26:52


--------------------
Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami...

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc!
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Go to the top of the page
+Quote Post
nospor
post 12.01.2023, 15:25:20
Post #22





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6297
Dołączył: 27.12.2004




zmien
private string $productName;

na
protected string $productName;
poniewaz dziedziczysz

analogicnzie reszta pol



No i odkomentuj ten parent::
public function __construct(DB $db){
$this->db = $db;
parent::__construct();
}
Powód edycji: [nospor]:


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
sadistic_son
post 12.01.2023, 15:29:47
Post #23





Grupa: Zarejestrowani
Postów: 1 482
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Niestety to samo co wczesniej -Fatal error: Uncaught TypeError: Cannot assign null to property Product::$productName of type string in
Jak tylko wejdę na stronę to konstruktor ProductAdd próbuje przypisać $_POST które nie zostało wysłane sad.gif
  1. namespace nameOne;
  2. use Product;
  3.  
  4. class ProductAdd extends Product
  5. {
  6. private DB $db;
  7.  
  8. public function __construct(DB $db){
  9. $this->db = $db;
  10. parent::__construct();
  11. }
  12.  
  13.  
  14. //Product
  15. class Product
  16. {
  17.  
  18. protected string $productName;
  19. protected string $sku;
  20. protected float $price;
  21. protected string $productType;
  22. public function __construct()
  23. {
  24. $this->productName = isset($_POST['name']) ? (string) $_POST['name'] : null;
  25. $this->sku = isset($_POST['sku']) ? (string) $_POST['sku'] : null;
  26. $this->price = isset($_POST['price']) ? (float) $_POST['price'] : null;
  27. $this->productType = isset($_POST['productType']) ? (string) $_POST['productType'] : null;
  28. }



--------------------
Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami...

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc!
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Go to the top of the page
+Quote Post
nospor
post 12.01.2023, 15:32:11
Post #24





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6297
Dołączył: 27.12.2004




Cannot assign null to property Product::$productName of type string in

No bo pola sa ustawione jako teksty czy liczby a ty przypisujesz null. No komunikat mowi to wyraznie.
Nie bardzo ogarniam czemu tworzysz produkt jesli POST nie byl wyslany.Znaczy wiem czemu, wszystko przez ten balagan. No ale dobra, nie ustawiaj nullow tylko to co ma byc

czyli

$this->productName = isset($_POST['name']) ? (string) $_POST['name'] : '';
$this->sku = isset($_POST['sku']) ? (string) $_POST['sku'] : '';
$this->price = isset($_POST['price']) ? (float) $_POST['price'] : 0;
$this->productType = isset($_POST['productType']) ? (string) $_POST['productType'] : '';


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
sadistic_son
post 12.01.2023, 15:56:05
Post #25





Grupa: Zarejestrowani
Postów: 1 482
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


No tak, przypisywałem null do stringa, to jasne że się nie da.
Uff, dobra, to chociaż jestem na etapie, że funkcjonalności działają. Dziękuję.

No to dalsze poprawianie przede mną, żeby z tego chaosu wyłoniła się jakaś struktura.

Powiedz mi prosze do czego właściwie klasa Product ma służyć? Ja mam nią tylko i wyłacznie (po zrobieniu setter/getter) pobierać i wyświetlać właściwości produktu tam gdzie jest to potrzbne?

Np na szybko (bo robię obiad jedną ręką):
  1. class Product{
  2. public function setName(string $name): void
  3. {
  4. $this->name = $name;
  5. }
  6.  
  7. public function getName(): string
  8. {
  9. return $this->name;
  10. }
  11. }
i potem jak chcę spradzić np czy jest wysłane formularzem $_POST['name'] to:
  1. $product = new Product();
  2. if(isset$_POST['save']) && isset($_POST['name'])){
  3. $product->setName($_POST['name']);
  4. }
no własnie i co teraz? Brakuje mi tego logicznego zastosowania dla tej klasy. Właściwie to przyznać można że cała ta moja aplikacja to nie zupełnie OOP, tylko po prostu uzycie metod klas jak w programowaniu proceduralnym, tak sądzę.

Ten post edytował sadistic_son 12.01.2023, 15:56:33


--------------------
Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami...

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc!
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Go to the top of the page
+Quote Post
nospor
post 12.01.2023, 16:01:51
Post #26





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6297
Dołączył: 27.12.2004




Klase Produkt zostala ci zaproponowana wczesniej jako DTO.

Wiec klasa Produkt jest po to, bys mial ladno klase do przechowywania nazwy produkt, ceny itp.

Juz ci pisalem wczesniej wiele razy. ProduktAdd nie moze dziedziczyc po Produkt, tylko ma otrzymac produkt tam gdzie trzeba czyli np


public function insertNewProduct(Product $product)

A gdzie tam w odmentach swojego kodu, gdize wywolujesz insertNewProduct, masz ten product stworzyc czyli




$product = new Product();
if(isset$_POST['save']) && isset($_POST['name'])){
$product->setName($_POST['name']);
}
.....
.....->nsertNewProduct($product);


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
sadistic_son
post 12.01.2023, 16:05:54
Post #27





Grupa: Zarejestrowani
Postów: 1 482
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Ok, zaczynam chwytać. Nigdzie w żadnych artykułach nie natrafiłem na takie proste pokazanie jak łaczyć znane mi proceduralne programowanie z OOP.
Dobra, a czy klasa nadrzędna w moim wypadku PageDisplay może mieć switch który centralnie robi
  1. case 'add-product': //w pasku adresu jest add-product
  2. $product = new Product();
  3. if(isset$_POST['save']) && isset($_POST['name'])){
  4. $product->setName($_POST['name']);
  5. }
  6. .....
  7. .....->nsertNewProduct($product);
Czy to jest po bożemu, albo chociaż akceptowalne (skoro to przyszły junior pisze)?


--------------------
Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami...

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc!
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Go to the top of the page
+Quote Post
nospor
post 12.01.2023, 16:08:24
Post #28





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6297
Dołączył: 27.12.2004




Na te chwile moze.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
sadistic_son
post 12.01.2023, 16:11:43
Post #29





Grupa: Zarejestrowani
Postów: 1 482
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


ok.
To klasa Product nie ma mieć właściwie żadnych iinych metod oprócz setterów i getterów, tak? Skoro np walidacja czy dane $_POST są wypełnione ma być gdzie indziej.

Ten post edytował sadistic_son 12.01.2023, 16:13:37


--------------------
Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami...

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc!
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Go to the top of the page
+Quote Post
nospor
post 12.01.2023, 16:14:00
Post #30





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6297
Dołączył: 27.12.2004




tak

I jesli to juz bedzie oddzielna klasa i ProductAdd po nei nie bedzie dziedziczyl, to zamien spowrotem protected na private


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
sadistic_son
post 13.01.2023, 09:59:43
Post #31





Grupa: Zarejestrowani
Postów: 1 482
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Ok, to to mi sporo wyjaśnia. Tego elementu mi chyba brakowało, żeby moc w ogóle zacząć porządkowanie tego chaosu. Dziękuję.

Hej, jakiego typu będa zmienne $dbh, $smt, $param i $value?
  1. class DB
  2. {
  3. private $dbh;
  4. private $stmt;
  5. private string $host;
  6. private string $name;
  7. private string $user;
  8. private string $pass;
  9.  
  10. public function __construct(string $host, string $name, string $user, string $pass)
  11. {
  12. $this->host = $host;
  13. $this->name = $name;
  14. $this->user = $user;
  15. $this->pass = $pass;
  16. $this->dbh = new \PDO("mysql:host=" . $this->host . ";dbname=" . $this->name, $this->user, $this->pass);
  17. }
  18.  
  19. public function query(string $query)
  20. {
  21. $this->stmt = $this->dbh->prepare($query);
  22. }
  23.  
  24. public function bind($param, $value, $type = null)
  25. {
  26. if (is_null($type)) {
  27. switch (true) {
  28. case is_int($value):
  29. $type = \PDO::PARAM_INT;
  30. break;
  31. case is_bool($value):
  32. $type = \PDO::PARAM_BOOL;
  33. break;
  34. case is_null($value):
  35. $type = \PDO::PARAM_NULL;
  36. break;
  37. default:
  38. $type = \PDO::PARAM_STR;
  39. }
  40. }
  41. $this->stmt->bindValue($param, $value, $type);
  42. }

dbh to object, tak? A co z $value która raz może być int, raz string itd? Jak mam ją typować w deklaracji metody bind ? Oraz jaki typ danych zwrócą mi tutaj poszczególne metody?

Ten post edytował sadistic_son 13.01.2023, 10:00:30


--------------------
Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami...

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc!
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Go to the top of the page
+Quote Post
nospor
post 13.01.2023, 10:04:00
Post #32





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6297
Dołączył: 27.12.2004




No obiekt, ale konkretnie obiekt PDO wiec

private \PDO $dbh;

Na takiej samej zasadzie jak ci typowalem wczoraj DB ale znowy nie laczysz kropek tongue.gif

Co do value to albo mixed albo union
https://www.php.net/manual/en/language.types.mixed.php

No a $param to przeciez string


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
sadistic_son
post 13.01.2023, 10:15:34
Post #33





Grupa: Zarejestrowani
Postów: 1 482
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Cytat(nospor @ 13.01.2023, 10:04:00 ) *
Na takiej samej zasadzie jak ci typowalem wczoraj DB ale znowy nie laczysz kropek tongue.gif
Ja już nie jestem młodym 30 parolatkiem, więc mam nieco utrudniony kontakt z bazą wink.gif Zwłaszcza to zauważyłem po covidzie rok temu (serio) i nie chce minąć. chyba już tak zostanie na stałe sad.gif

a $type to też będzie string?
a $stmt ?


A taka funkcja jak poniżej, która nic nie zwraca, to powinna być :void ?
  1. public function execute()
  2. //czy tak? public function execute(): void
  3. {
  4. $this->stmt->execute();
  5. }



Albo tutaj:
  1. public function resultSet()
  2. {
  3. $this->execute();
  4. return $this->stmt->fetchAll(\PDO::FETCH_ASSOC);
  5. }
Co to mi zwraca? Object? Czyli jak powinna wyglądać pierwsza linijka?
  1. //tak?
  2. public function resultSet(): object


Ten post edytował sadistic_son 13.01.2023, 10:16:17


--------------------
Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami...

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc!
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Go to the top of the page
+Quote Post
nospor
post 13.01.2023, 10:20:17
Post #34





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6297
Dołączył: 27.12.2004




Starasz sie o te nowa robote, ona wymaga samodzielnosci. Ok, na poczatku mozna o cos pytac, ale latanie z pierdulami to naprawde za dlugo miejsca tam nie zagrzejesz nawet jako junior

Jkaim cudem $type to jest string?
przeciez do $type przypisujesz
$type = \PDO::PARAM_INT;

Wiec idziesz do manuala PHP i patrzysz czym jest \PDO::PARAM_INT i juz wiesz jakiego typu bedzie $type


Tak, jak funkcja nic nie zwraca to void


return $this->stmt->fetchAll(\PDO::FETCH_ASSOC);
No to samo tutaj. Co ci zwraca fetchAll() ? Obiekt? Naprawde? Bo ja wchodze do manuala i widze ze wraca jednak co innego


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
viking
post 13.01.2023, 10:20:55
Post #35





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Poczytaj sobie https://prophp.pl/advice/show/14/jak_czytac...mentacje_php%3F
Masz np https://www.php.net/manual/en/pdostatement.fetchall.php
Więc co zwraca public PDOStatement::fetchAll(int $mode = PDO::FETCH_DEFAULT): array ?


--------------------
Go to the top of the page
+Quote Post
sadistic_son
post 13.01.2023, 10:33:15
Post #36





Grupa: Zarejestrowani
Postów: 1 482
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Cytat(nospor @ 13.01.2023, 10:20:17 ) *
Jkaim cudem $type to jest string?
przeciez do $type przypisujesz
$type = \PDO::PARAM_INT;
Tak, wewnątrz metody przypisuję rózne wartości. Ale przecież wywołując metodę bind podaję parametry w formie $this->db->bind(':sku', $sku); więc w tym przypadku $type na wejściu będzie null. Innym razem mogę go podać i wtedy będzie stringiem, tak? Czyli powinno być public function bind(string $param, mixed $value, mixed $type = null) . Czy jednak błądzę?

Widzę w manualu że w takim przypadku $type = \PDO::PARAM_INT; to type to "PDO::PARAM_INT (int) Represents the SQL INTEGER data type.". Jednak moje pytanie dotyczyło typu wejściowego, byłem nieprecyzyjny.


Cytat(nospor @ 13.01.2023, 10:20:17 ) *
return $this->stmt->fetchAll(\PDO::FETCH_ASSOC);
No to samo tutaj. Co ci zwraca fetchAll() ? Obiekt? Naprawde? Bo ja wchodze do manuala i widze ze wraca jednak co innego
Cytat(viking @ 13.01.2023, 10:20:55 ) *
Masz np https://www.php.net/manual/en/pdostatement.fetchall.php
Więc co zwraca public PDOStatement::fetchAll(int $mode = PDO::FETCH_DEFAULT): array ?
No ok, ok, to będzie array.

Ten post edytował sadistic_son 13.01.2023, 10:34:57


--------------------
Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami...

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc!
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Go to the top of the page
+Quote Post
nospor
post 13.01.2023, 10:44:30
Post #37





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6297
Dołączył: 27.12.2004




$this->db->bind(':sku', $sku);
Troche sie zgubilem. Co ma sku do $type danych ktore bindujesz?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
sadistic_son
post 13.01.2023, 10:49:29
Post #38





Grupa: Zarejestrowani
Postów: 1 482
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


To z sku to tylko przykład wywołania metody bind.
W definicji mam:
  1. public function bind(string $param, mixed $value, $type = null): void

A wywołuje ją np w taki sposób (tutaj nie podając $type w parametrze):
  1. $queryInsertProduct = "INSERT INTO `product` (`id`, `sku`, `name`, `price`, `type`) VALUES (null, :sku, :productName , :price, :selectedType)";
  2. $this->db->query($queryInsertProduct);
  3. $this->db->bind(':sku', $sku);
  4. $this->db->bind(':productName', $productName);
  5. $this->db->bind(':price', $price);
  6. $this->db->bind(':selectedType', $selectedType);

Stąd moje pytanie jaki typ danych będzie mieć $type w definicji metody bind (na wejściu), skoro raz jest na wejściu null (jak powyżej), innym razem mogę mu podać PARAM_INT. Wg mnie na wejściu będzie to mixed. public function bind(string $param, mixed $value, mixed $type = null) Tak?

Ten post edytował sadistic_son 13.01.2023, 10:50:50


--------------------
Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami...

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc!
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Go to the top of the page
+Quote Post
nospor
post 13.01.2023, 10:51:44
Post #39





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6297
Dołączył: 27.12.2004




W przykladach tutaj co podales zawsze jest NULL. Ale type to type od PDO a ten zawsze jest INT. Wiec twoj $type moze byc nullem albo INTem wiec


public function bind(string $param, mixed $value, ?int $type = null)

znak zapytania mowi, ze cos moze byc NULL


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
sadistic_son
post 13.01.2023, 10:59:04
Post #40





Grupa: Zarejestrowani
Postów: 1 482
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


O, i teraz się zrozumieliśmy. Dzięki za odpowiedź smile.gif

Nastepne pytanie, jeśli mogę.

Zabrałem się za naprawę klasy Product oraz usunięcie jej dziedziczenia np z ProductAdd.
W Product pozbyłem się konstruktora aby posługiwać się setterami i getterami. Wygląda ona teraz tak (kawałek):
  1. class Product
  2. {
  3.  
  4. private string $productName;
  5. private string $sku;
  6. private float $price;
  7. private string $productType;
  8. // public function __construct()
  9. // {
  10. // $this->productName = isset($_POST['name']) ? (string) $_POST['name'] : '';
  11. // $this->sku = isset($_POST['sku']) ? (string) $_POST['sku'] : '';
  12. // $this->price = isset($_POST['price']) ? (float) $_POST['price'] : 0;
  13. // $this->productType = isset($_POST['productType']) ? (string) $_POST['productType'] : '';
  14. // }
  15.  
  16. public function setProductName(string $productName): void
  17. {
  18. $this->productName = $productName;
  19. }
  20.  
  21. public function getProductName(): string
  22. {
  23. return $this->productName;
  24. }
  25.  
  26. //itd dla pozostałych zmiennych


Teraz chcę się posłużyć tą klasą. Gdy miałem konstruktor to było jasne dla mnie:
  1. $product = new Product();
  2. $productObject->insertNewProduct($product);
  3.  
  4.  
  5. // gdzie indziej tworzenie metody insertNewProduct($product):
  6. public function insertNewProduct(Product $product)
  7. {
  8. $sku = $product->sku;
  9. $productName = $product->productName;
  10. $price = $product->price;
  11. $selectedType = $product->productType;
To działało. Teraz natomiast pozbyłem się konstruktora i porobiłem settery i gettery i zastanawiam się jak powinno wyglądac wywołanie metody insertNewProduct przy użyciu Product.
  1. $product = new Product();
  2. $product->setProductName($_POST['name']);
  3. $product->setSku($_POST['sku']);
  4. $product->setPrice($_POST['price']);
  5. $product->setProductType($_POST['productType']);
  6. $productObject->insertNewProduct($product);
  7. //czy tak?
  8. //dobrze kombinuję?
No i deklaracja metody:
  1. public function insertNewProduct(Product $product)
  2. {
  3. $sku = $product->getSku();


EDIT: Tzn, że to działa to wiem. Moje pytanie to - czy robię to zgodnie ze sztuką, lub chociaż niedaleko jej.

Ten post edytował sadistic_son 13.01.2023, 11:07:11


--------------------
Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami...

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc!
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Go to the top of the page
+Quote Post

4 Stron V  < 1 2 3 4 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 27.04.2024 - 22:39