Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> jak uprościć pracę z bindValue jeśli wartości jest dużo?
jolam
post
Post #1





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 12.07.2009

Ostrzeżenie: (10%)
X----


Witam serdecznie

Wstawiam do bazy nowe rekordy:
  1. $sql = "
  2. INSERT INTO produkty
  3. ( a, b, c, d )
  4. VALUES
  5. ( :a, :b, :c, biggrin.gif )
  6. ";
  7. $stmt = $dbh->prepare( $sql );
  8. $stmt->bindValue(':a', $a );
  9. $stmt->bindValue(':b', $b );
  10. $stmt->bindValue(':c', $c );
  11. $stmt->bindValue('biggrin.gif', $d );
  12. $stmt->execute();


I jak widzicie musiałam kilka razy napisać $stmt->bindValue. Czy da się jakoś uprościć i skrócić całą tą operacje? Tak żęby nie trzeba było się powtarzać? Jak mogłabym to zrobić?
Bardzo proszę was o pomoc.

pozdrawiam Jola
Go to the top of the page
+Quote Post
jmail
post
Post #2





Grupa: Zarejestrowani
Postów: 352
Pomógł: 53
Dołączył: 10.08.2009

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


  1.  
  2. $sql = '
  3. INSERT INTO
  4. produkty
  5. ( a, b, c, d )
  6. VALUES
  7. (\''.$a.'\', \''.$b.'\', \''.$c.'\', \''.$d.'\')';
  8. $stmt = $dbh->prepare( $sql );
  9. $stmt->execute();
  10.  
Go to the top of the page
+Quote Post
jolam
post
Post #3





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 12.07.2009

Ostrzeżenie: (10%)
X----


To zły pomysł bo jeśli zmienne zawierają tekst z cudzysłowami i apostrofami, to wszystko się popsuje. Dlatego trzeba używać bindValue.

Może ktoś inny wie jak to uprościć?

pozdrawiam Jola

Ten post edytował jolam 21.09.2009, 11:32:12
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




http://pl.php.net/manual/pl/pdo.prepare.php
I sobie przejrzyj przykłady to może doznasz olśnienia winksmiley.jpg

ps: przeciez to nie ma zadnego związku z bazą danych. Przenosze


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

"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
jolam
post
Post #5





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 12.07.2009

Ostrzeżenie: (10%)
X----


Ja je czytałam! I to wiele razy.

Może jakaś podpowiedź ?
bardzo proszę rolleyes.gif

pozdrawiam Jola

Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




blinksmiley.gif blinksmiley.gif blinksmiley.gif
Przeciez tam są dwa przykłady. Oba bardzo krótkie i oba zawierają przykład jak włozyc kilka wartosci bez uzycia bind.
Mam ci to samo wkleic tutaj bys to zauwazyla? No bez przesady smile.gif


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

"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
jolam
post
Post #7





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 12.07.2009

Ostrzeżenie: (10%)
X----


O to chodzi?

$sql = 'SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour';
$sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$sth->execute(array(':calories' => 150, ':colour' => 'red'));
$red = $sth->fetchAll();

Ale co ze zmiennymi, które mają cudzysłowy i znaki specjalne? Przecież po to używam tego bindvalue, żeby mi nie psuły się zapytania. No już zgłupiałam zupełnie, o co chodzi?
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




tak, o to chodzi.

Cytat
Ale co ze zmiennymi, które mają cudzysłowy i znaki specjalne? Przecież po to używam tego bindvalue, żeby mi nie psuły się zapytania. No już zgłupiałam zupełnie, o co chodzi?
No ale przeciez to jest dokladnie to samo co bind. Tylko zamiast kolejnych bind uzywasz execute z tablicą parametrow. Cała reszta jest identyczna i sie nie musisz martwic o zadne cudzyslowia. No przeciez w tych przykladach nie masz podanych zadnych cudzyslowi, nawet dla tekstu. No czytaj trochę z wiekszą uwagą...


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

"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
zegarek84
post
Post #9





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


http://php.net.pl/manual/pl/pdo.prepared-statements.php
Cytat
Przykład #3 Fetching data using prepared statements
This example fetches data based on a key value supplied by a form. The user input is automatically quoted, so there is no risk of a SQL injection attack.
  1. <?php
  2. $stmt = $dbh->prepare("SELECT * FROM REGISTRY where name = ?");
  3. if ($stmt->execute(array($_GET['name']))) {
  4. while ($row = $stmt->fetch()) {
  5. print_r($row);
  6. }
  7. }
  8. ?>


Ten post edytował zegarek84 21.09.2009, 13:02:50


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
jolam
post
Post #10





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 12.07.2009

Ostrzeżenie: (10%)
X----


A jeszcze muszę zapytac czy da się jakoś zrobić aby to działało:
$sql = "
INSERT INTO litereczki
( a, b, c )
VALUES
( '$a', '$b', '$c' )
";
$stmt = $dbh -> prepare( $sql );
$stmt -> execute();

Bo jak w tych zmiennych są jakieś cudzysłowy albo apostrofy to się psuje wszystko. A jednak tak byłoby najszybciej pisać w skrypcie.

pozdrawiam Jola
Go to the top of the page
+Quote Post
Zyx
post
Post #11





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

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


Tak się nie powinno pisać w ogóle, a już zwłaszcza w PDO. Zapomnij o czymś takim.


--------------------
Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0
Go to the top of the page
+Quote Post
zegarek84
post
Post #12





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


Cytat(jolam @ 27.09.2009, 19:09:38 ) *
A jeszcze muszę zapytac czy da się jakoś zrobić aby to działało:
$sql = "
INSERT INTO litereczki
( a, b, c )
VALUES
( '$a', '$b', '$c' )
";
$stmt = $dbh -> prepare( $sql );
$stmt -> execute();

Bo jak w tych zmiennych są jakieś cudzysłowy albo apostrofy to się psuje wszystko. A jednak tak byłoby najszybciej pisać w skrypcie.

pozdrawiam Jola

jeśli chcesz pdo i najszybciej to korzystaj ze znaków zapytania jako zmiennych i nie wykonuj prepare a w execute wstaw tablicę ze zmiennymi
  1. $sql = 'INSERT INTO litereczki ( a, b, c ) VALUES ( ?, ?, ?)';
  2. $stmt = $dbh -> prepare($sql);
  3. $stmt -> execute(array($a,$b,$c));


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
jolam
post
Post #13





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 12.07.2009

Ostrzeżenie: (10%)
X----


zegarek84 to ze znakami zapytania fajne jest i szybkie. Dziękuję serdecznie.


Jola
Go to the top of the page
+Quote Post
nospor
post
Post #14





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@jola przeciez na samym początku jak dawalem ci linka do dwoch przykladow to jeden z nich byl wlasnie ze znakami zapytania. Ty normalnie osłabiasz... blinksmiley.gif


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

"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

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 Aktualny czas: 21.08.2025 - 18:55