![]() |
![]() ![]() |
![]() |
-pawlo546- |
![]()
Post
#1
|
Goście ![]() |
Witam,
Stworzyłem klase: class Lista { public $what; public $from; public $orderBy; public function __construct($what,$from,$orderBy, PDO $pdo){ $this->what = $what; $this->from = $from; $this->orderBy = $orderBy; $this->pdo = $pdo; } public function stworz(){ $pdo = $this->pdo; $stmt = $pdo->prepare('select ? from ? order by ?'); $stmt->bindParam (1,$what, PDO::PARAM_STR); $stmt->bindParam (2,$from, PDO::PARAM_STR); $stmt->bindParam (3,$orderBy, PDO::PARAM_STR); $what =$this->what; $from = $this->from; $orderBy = $this->orderBy; $stmt->execute(array($what, $from, $orderBy)); print "<select name=\"punkt[]\" style=\"width: 150px;\">\n"; foreach($stmt as $row){ print "<option value=\"$row[$what]\">$row[$what]</option>\n"; } print "</select>\n"; $stmt->closeCursor(); } } którą następnie wywołuję: try{ $pdo = new PDO('pgsql:host=localhost;dbname=db;port=5432', 'aaaa', 'bbbb'); $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $listanrpkt = new Lista("nrpkt", "punkt", "nrpkt", $pdo); $listanrpkt->stworz(); } catch(PDOException $e) { echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage(); } jednak pomimo moich juz licznych kombinacji nawsz strona wyrzuca mi błąd: SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at or near "$2" LINE 1: select $1 from $2 order by $3 ^ sprawdzałem pisownie nazw tabeli i kolumn i wszystko na pewno jest tak samo jak w PostgreSQL tym bardziej, że przez query zamiast prepare wszystko działa. |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 285 Pomógł: 18 Dołączył: 30.01.2014 Skąd: <?=$_GET['city']?> Ostrzeżenie: (0%) ![]() ![]() |
może zamień
lepiej wygląda, szybsze i może poprawniejsze. co do błędu: podales za krótki, podales i błąd i kod taki jaki jest? bo w błędzie masz $1 $2 itd a jeśli to zmienne, to zmienne takie nie są "poprawne", trzeba $a1 $x2 np. edit: Cytat przez query zamiast prepare wszystko działa. nie doczytalem. Podaj jak robisz z query. Ten post edytował ZaXaZ 27.04.2014, 00:19:06 -------------------- Jak poprawnie zadać pytanie || Generator #RRGGBB || Kurs: php, mysql <> html & css || Hosting || Validator: html, css || Narzędzia dla programistów |
|
|
-pawlo546- |
![]()
Post
#3
|
Goście ![]() |
Powyżej zamieściłem pełny skrypt aplikacji i wynikowy błąd. I osobiście wydaje mi się, że te zmienne $1,$2,$3 to są przerobione podczas podpinania zmienne $what, $from, $orderBy.
|
|
|
-pawlo546- |
![]()
Post
#4
|
Goście ![]() |
Wersja z query:
$pdo = $this->pdo; $stmt = $pdo->query('select nrpkt from punkt order by nrpkt'); //$stmt->bindParam (1,$what, PDO::PARAM_STR); //$stmt->bindParam (2,$from, PDO::PARAM_STR); //$stmt->bindParam (3,$orderBy, PDO::PARAM_STR); $what =$this->what; $from = $this->from; $orderBy = $this->orderBy; $stmt->execute(array($what, $from, $orderBy)); print "<select name=\"punkt[]\" style=\"width: 150px;\">\n"; foreach($stmt as $row){ print "<option value=\"$row[$what]\">$row[$what]</option>\n"; } print "</select>\n"; $stmt->closeCursor(); |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 285 Pomógł: 18 Dołączył: 30.01.2014 Skąd: <?=$_GET['city']?> Ostrzeżenie: (0%) ![]() ![]() |
a teraz jak?, zamien też to co pisałem w poprzednim poscie ps. $what musi zawierac teraz 1, $from 2, $orderBy 3, ale napewno masz tabele o nazwie 2? Kod "WYBIERZ 1 Z 2 KOLEJNOŚCIĄ PRZEZ 3" (mało logiczne z tymi cyframi) Ten post edytował ZaXaZ 27.04.2014, 00:42:34 -------------------- Jak poprawnie zadać pytanie || Generator #RRGGBB || Kurs: php, mysql <> html & css || Hosting || Validator: html, css || Narzędzia dla programistów |
|
|
-pawlo546- |
![]()
Post
#6
|
Goście ![]() |
Nadal błąd:
Połączenie nie mogło zostać utworzone: SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at or near "$2" LINE 1: select $1 from $2 order by $3 ^ Kod wyglada następująco: public function stworz(){ $pdo = $this->pdo; $stmt = $pdo->prepare('select :nrpkt from :tabela order by :nrpkt2'); $stmt->bindParam (':nrpkt',$what, PDO::PARAM_STR); $stmt->bindParam (':tabela',$from, PDO::PARAM_STR); $stmt->bindParam (':nrpkt2',$orderBy, PDO::PARAM_STR); $what =$this->what; $from = $this->from; $orderBy = $this->orderBy; $stmt->execute(array($what, $from, $orderBy)); print "<select name=\"punkt[]\" style=\"width: 150px;\">\n"; foreach($stmt as $row){ print "<option value=".$row[$what].">$row[$what]</option>\n"; } print "</select>\n"; $stmt->closeCursor(); } } Dla mnie to wyglada jakby on dopisywal cos do tych zmiennych. |
|
|
-pawlo546- |
![]()
Post
#7
|
Goście ![]() |
Nie mam tabeli o nazwach 1,2,3
pod zmienne what, from ,orderBy poprzez construktora przypisane sa wartosci "nrpkt" "punkt" "nrpkt" |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 285 Pomógł: 18 Dołączył: 30.01.2014 Skąd: <?=$_GET['city']?> Ostrzeżenie: (0%) ![]() ![]() |
bo dwa razy wykonujesz kod o.O, w bindParam już wykonane edit: + jeśli dalej nie działa zamien SELECT na EXPLAIN SELECT i pokaż co zwraca. Ten post edytował ZaXaZ 27.04.2014, 00:50:34 -------------------- Jak poprawnie zadać pytanie || Generator #RRGGBB || Kurs: php, mysql <> html & css || Hosting || Validator: html, css || Narzędzia dla programistów |
|
|
-pawlo546- |
![]()
Post
#9
|
Goście ![]() |
tak przez przypadek zostało w wyniku różnych prób.
ale niestety zmiana tego nie zniwelowała błędu. |
|
|
-pawlo546- |
![]()
Post
#10
|
Goście ![]() |
Połączenie nie mogło zostać utworzone: SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at or near "$2" LINE 1: explain select $1 from $2 order by $3 ^
|
|
|
-pawlo546- |
![]()
Post
#11
|
Goście ![]() |
W ten sposób działa:
$what =$this->what; $from = $this->from; $orderBy = $this->orderBy; $pdo = $this->pdo; $sql = "Select ".$what." from ".$from." Order by ".$orderBy; $stmt = $pdo->prepare($sql); /*$stmt->bindParam (':nrpkt',$what, PDO::PARAM_STR); $stmt->bindParam (':tabela',$from, PDO::PARAM_STR); $stmt->bindParam (':nrpkt2',$orderBy, PDO::PARAM_STR); */ $stmt->execute(); Jednak nie wiem jak wtedy wykonać podpinanie. |
|
|
-pawlo546- |
![]()
Post
#12
|
Goście ![]() |
a gdy zrobilem w ten sposob:
$sql = "Select ".$pdo->quote($what, PDO::PARAM_STR)." from ".$pdo->quote($from , PDO::PARAM_STR)." Order by ".$pdo->quote($orderBy, PDO::PARAM_STR); $stmt = $pdo->prepare($sql); to wyskoczył błąd: Połączenie nie mogło zostać utworzone: SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at or near "'punkt'" LINE 1: Select 'nrpkt' from 'punkt' Order by 'nrpkt' ^ i mysle ze te cydzyslowia moga byc wskazowka sak sie bral ten poprzedni blad ale nad nie wiem dlaczego sa one dopisywane do zmiennych |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 285 Pomógł: 18 Dołączył: 30.01.2014 Skąd: <?=$_GET['city']?> Ostrzeżenie: (0%) ![]() ![]() |
a gdy zrobilem w ten sposob: $sql = "Select ".$pdo->quote($what, PDO::PARAM_STR)." from ".$pdo->quote($from , PDO::PARAM_STR)." Order by ".$pdo->quote($orderBy, PDO::PARAM_STR); $stmt = $pdo->prepare($sql); to wyskoczył błąd: Połączenie nie mogło zostać utworzone: SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at or near "'punkt'" LINE 1: Select 'nrpkt' from 'punkt' Order by 'nrpkt' ^ i mysle ze te cydzyslowia moga byc wskazowka sak sie bral ten poprzedni blad ale nad nie wiem dlaczego sa one dopisywane do zmiennych
zamien całą funkcję na to co ja zrobiłem wyżej, nie rób quote bo w bindParam jesteś bezpieczny a quote dodaje z lewej i prawej apostrof. Ten post edytował ZaXaZ 27.04.2014, 01:17:51 -------------------- Jak poprawnie zadać pytanie || Generator #RRGGBB || Kurs: php, mysql <> html & css || Hosting || Validator: html, css || Narzędzia dla programistów |
|
|
-pawlo546- |
![]()
Post
#14
|
Goście ![]() |
Wówczas zmienne what, from i orderby nie maja zadnych wartosci, a jak probuje im przypisac prze = $this-> to wyskakuje błąd Fatal error: Cannot access empty property in /var/www/klasalista.php on line 20
|
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 285 Pomógł: 18 Dołączył: 30.01.2014 Skąd: <?=$_GET['city']?> Ostrzeżenie: (0%) ![]() ![]() |
w funkcji sugerowalem się twoją wypowiedzią Cytat W ten sposób działa: (...)
Ten post edytował ZaXaZ 27.04.2014, 01:48:15 -------------------- Jak poprawnie zadać pytanie || Generator #RRGGBB || Kurs: php, mysql <> html & css || Hosting || Validator: html, css || Narzędzia dla programistów |
|
|
-pawlo546- |
![]()
Post
#16
|
Goście ![]() |
generalnie to jest praktycznie stan wyjsciowy co przedstawiłeś, zmienne po wypisaniu funkcja print wypisuja sie z odpowiednimi przypisanymi wartosciami (nrpkt, punkt, nrpkt).
Jednak dodałem do kodu: var_dump($stmt->queryString); var_dump($stmt->execute()); i co ciekawe pojawił się komunikat: punkt nrpkt from punkt orderBy nrpkt string(51) "EXPLAIN SELECT :nrpkt FROM :tabela ORDER BY :nrpkt2" Połączenie nie mogło zostać utworzone: SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at or near "$2" LINE 1: EXPLAIN SELECT $1 FROM $2 ORDER BY $3 ^ Co by sugerowalo ze (:nrpkt itd) w ogole nie sa zamieniane na tekst |
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 285 Pomógł: 18 Dołączył: 30.01.2014 Skąd: <?=$_GET['city']?> Ostrzeżenie: (0%) ![]() ![]() |
(...) string(51) "EXPLAIN SELECT :nrpkt FROM :tabela ORDER BY :nrpkt2" Połączenie nie mogło zostać utworzone: SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at or near "$2" LINE 1: EXPLAIN SELECT $1 FROM $2 ORDER BY $3 ^ Co by sugerowalo ze (:nrpkt itd) w ogole nie sa zamieniane na tekst to wyświetla kod SQL jaki jest zrobiony, ps. zrób dokładnie taki kod jak dałem w poscie poprzednim, nic nie zmieniaj póki co. . . EXPLAIN miało być tylko chwilę żeby zobaczyć ewentualne dodatkowe błędy. edit: a ponieważ nie masz bezpośrednio np. zmiennej do zapytania to nie powinno wyświetlić zamienionych rzeczy.. Ten post edytował ZaXaZ 27.04.2014, 02:09:23 -------------------- Jak poprawnie zadać pytanie || Generator #RRGGBB || Kurs: php, mysql <> html & css || Hosting || Validator: html, css || Narzędzia dla programistów |
|
|
-pawlo546- |
![]()
Post
#18
|
Goście ![]() |
przy Twoim kodzie nic sie nie pojawia.
|
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 285 Pomógł: 18 Dołączył: 30.01.2014 Skąd: <?=$_GET['city']?> Ostrzeżenie: (0%) ![]() ![]() |
przy Twoim kodzie nic sie nie pojawia. dodaj do stworz() $pdo = $this->pdo; bo zapomniałem, idę spać. -------------------- Jak poprawnie zadać pytanie || Generator #RRGGBB || Kurs: php, mysql <> html & css || Hosting || Validator: html, css || Narzędzia dla programistów |
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 6 380 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Nazwy tabel nie mogą być bindowane.
Zobacz np http://stackoverflow.com/questions/182287/...me-as-parameter -------------------- |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 10:14 |