[PHP][MSSQL] Zmiana PHP, problem z PDO |
[PHP][MSSQL] Zmiana PHP, problem z PDO |
17.04.2019, 11:41:25
Post
#1
|
|
Grupa: Zarejestrowani Postów: 251 Pomógł: 0 Dołączył: 21.01.2010 Skąd: Nowy Sącz Ostrzeżenie: (0%) |
Witam
Zmieniam wersje PHP z 5 na 7 dla starego projektu, problem że kodu jest bardzo dużo muszę dopisać brakujące funkcje, największym problemem na jaki aktualnie natrafiłem to zapytania mssql w pętli innego zapytania, pętla wykonuje się tylko raz ponieważ kolejne zapytanie mssql które jest w pętli wszystko psuje, żeby było jaśniej poniżej funkcje jakie sobie dopisałem dla zachowania kompatybilności
zauważyłem że PDO to trochę inna zasada działania, to co przypisuje do zmiennej z mssql_query przepada po kolejnym użyciu tej funkcji da się to obejść? przykład problemu (wyświetli tylko 1 TowId zamiast 2 ):
w zasadzie to PDO kompletnie nie ma sensu albo czegoś nie rozumiem, bo np jeśli w pętli wykonują się różne operacje i przypadkowo będzie tam gdzieś funkcja i kolejne zapytanie PDO to program będzie działać niepoprawnie? chyba to znak żeby unikać tego jak ognia chyba zacznę przerabiać kod bo nie widzę rozwiązania Ten post edytował adi456 17.04.2019, 13:37:55 |
|
|
17.04.2019, 14:17:34
Post
#2
|
|
Grupa: Zarejestrowani Postów: 146 Pomógł: 19 Dołączył: 1.03.2012 Ostrzeżenie: (0%) |
w zasadzie to PDO kompletnie nie ma sensu... A jednak to mssql wywalili ...albo czegoś nie rozumiem, bo np jeśli w pętli wykonują się różne operacje i przypadkowo będzie tam gdzieś funkcja i kolejne zapytanie PDO to program będzie działać niepoprawnie? Czemu niby ma działać niepoprawnie? chyba to znak żeby unikać tego jak ognia chyba zacznę przerabiać kod bo nie widzę rozwiązania Znakiem aby o tym pomyśleć były wszystkie DEPRECATED MESSAGES w php5+ które większość wyłączała w php.ini albo @ Nie wiem jak bardzo masz złożoną strukturę swojej strony ale ja to widzę w ten sposób, że i tak musisz robić refactor programu. W funkcji mssql nie było możliwości bindowania parametrów w zapytaniach i jeżeli tylko "podstawisz" swoje funkcje pod te, które już nie działają to nawet użycie PDO nie uchroni Cię przed SQL Injection. |
|
|
17.04.2019, 14:30:42
Post
#3
|
|
Grupa: Zarejestrowani Postów: 251 Pomógł: 0 Dołączył: 21.01.2010 Skąd: Nowy Sącz Ostrzeżenie: (0%) |
trochę nie kumam
1. kwestie obsługi/wyświetlania błędów oraz SQL INJECTION nie są tu istotne nie o tym temat i mało ma to wspólnego z moim problemem 2. "Czemu niby ma działać niepoprawnie?" opisałem w 1 wątku "przykład problemu (wyświetli tylko 1 TowId zamiast 2 )" 3. i nie wiem co ma temat bindowania z tym wspólnego? nie chce dodawać wartości tylko całkowicie zmienić zapytanie w trakcie wykonywania innego Temat: MySQLPHPPDOZapytanie w zapytaniu kilka zapytan na raz w PDO ten wątek mnie oświecił zrobiłem małą wpadkę, zamast generowac za kazdym razem nowe PDO korzystałem cały czas z tego samego jednocześnie go nadpisując Ten post edytował adi456 17.04.2019, 15:06:47 |
|
|
17.04.2019, 15:09:41
Post
#4
|
|
Grupa: Zarejestrowani Postów: 146 Pomógł: 19 Dołączył: 1.03.2012 Ostrzeżenie: (0%) |
1. kwestie obsługi/wyświetlania błędów oraz SQL INJECTION nie są tu istotne nie o tym temat i mało ma to wspólnego z moim problemem No, na razie nie są. Co będzie gdy się pojawią 2. "Czemu niby ma działać niepoprawnie?" opisałem w 1 wątku "przykład problemu (wyświetli tylko 1 TowId zamiast 2 )" No patrz, a u mnie działa poprawnie (i piszę całkiem serio). Zmieniłem tylko linijkę w PDO na SWOJĄ bazę danych MYSQL. 3. i nie wiem co ma temat bindowania z tym wspólnego? nie chce dodawać wartości tylko całkowicie zmienić zapytanie w trakcie wykonywania innego Tutaj zmiana zapytania nie odgrywa roli. Niby czemu nie mógłbym wykonać zapytania podczas wykonywania innego zapytania? Inna sprawa, że "brzydko" to wygląda No to ja też EDIT A kto mi zabroni tworzyć NOWY obiekt PDO z nowym połączeniem skoro baza mi na to pozwoli i zapytania w żaden sposób nie są zależne od siebie? Powtarzam, Twój kod mi działa Ten post edytował leonpro778 17.04.2019, 15:13:36 |
|
|
18.04.2019, 07:47:48
Post
#5
|
|
Grupa: Zarejestrowani Postów: 965 Pomógł: 285 Dołączył: 19.06.2015 Skąd: Warszawa Ostrzeżenie: (0%) |
https://bugs.php.net/bug.php?id=65945
To nie wina PDO tylko mssql Po prostu fetchuj dane przed wykonaniem kolejnych zapytań... Poza tym wykonywanie zapytań w pętli to zła praktyka, zazwyczaj da się tego uniknąć. A kto mi zabroni tworzyć NOWY obiekt PDO z nowym połączeniem skoro baza mi na to pozwoli i zapytania w żaden sposób nie są zależne od siebie? Limit połączeń do bazy przy dużym ruchu . |
|
|
18.04.2019, 09:35:38
Post
#6
|
|
Grupa: Zarejestrowani Postów: 146 Pomógł: 19 Dołączył: 1.03.2012 Ostrzeżenie: (0%) |
No, daltego napisałem "skoro mi baza pozwoli"
|
|
|
18.04.2019, 09:58:05
Post
#7
|
|
Grupa: Moderatorzy Postów: 36 447 Pomógł: 6292 Dołączył: 27.12.2004 |
Cytat przykład problemu (wyświetli tylko 1 TowId zamiast 2 ): Twoj przyklad jest totalnie bez sensu bo wewnatrz petli caly czas pobierasz te same rekordy wiec rownie dobrze mozesz je pobrac przed petla. Jesli zas masz faktycznie jakis konkretny problem to pokaz ten konkretny problem Cytat function mssql_num_rows($co){ $ile=count($co->fetchAll()); query_mssql($co->queryString); // bez tego niszczy sql/zmienną query tak samo jak zapytania w pętli return $ile; } Zabijesz kiedys serwer takimi potworkami. Moze pokaz konkretne przyklady a powiemy ci jak je poprawic Zas co do brakujacych rekordow w petli to wlacz moze buforowanie. Nawet sterownik mysql w PDO sie wywalalal na takich zapytaniach. Generalne jak juz wspomniano takich potworkow nie powinno sie tworzyc edit: no i to tworzenie nowego polaczenia tylko po to by wykonac kolejne zapytanie do bazy... to chyba jakis zart? -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
19.04.2019, 15:54:32
Post
#8
|
|
Grupa: Zarejestrowani Postów: 251 Pomógł: 0 Dołączył: 21.01.2010 Skąd: Nowy Sącz Ostrzeżenie: (0%) |
"Poza tym wykonywanie zapytań w pętli to zła praktyka, zazwyczaj da się tego uniknąć" - zgadzam się ale ze względu na przejrzystość kodu i małą ilość pętli czasami zwyczajnie jest wygodniej, po za tym nie jest to aplikacja publiczna/masowa tylko obróbka danych z innego programu magazynowego z której korzysta raz na jakiś czas kilka osób więc serwerowi nie zaszkodzi i uważam że ujdzie.
"Twoj przyklad jest totalnie bez sensu bo wewnatrz petli caly czas pobierasz te same rekordy wiec rownie dobrze mozesz je pobrac przed petla." faktycznie przykład bezsensowny ale sprawdzałem na nim czy działa poprawnie dlatego skopiowałem "Zabijesz kiedys serwer takimi potworkami. Moze pokaz konkretne przyklady a powiemy ci jak je poprawic" zdaje sobie sprawę że to kiepskie rozwiązanie no ale na chwile obecną jedyne "na szybko" ogólnie nie mam czasu wracać do tego kodu, bo szef naciska na nowe tematy a nie jest to kilka linijek tylko kilka lat kodowania więc i tak ryzyko że na koniec coś przeoczę jest duże dlatego zdecydowałem się na taką partyzantkę z tymi funkcjami bo chyba lepsze to niż stare php i stara wersja mssql dla poprawnego działania muszę za każdym razem tworzyć PDO żeby poprzednie się nie nadpisywało, a żeby nie tworzyło się nowe zanim stare nie będzie potrzebne, aktualnie problem rozwiązany a funckje wyglądają tak:
PS. jeśli to nazywacie zabijaniem serwera to co powiecie na wirtualizacje windowsa na debianie tylko po to żeby poprawnie działała baza MSSQL Ten post edytował adi456 19.04.2019, 16:00:18 |
|
|
19.04.2019, 21:36:16
Post
#9
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
przecież MSSQL jest pod linuksa :|
Ba nawet w dockerze jest: https://hub.docker.com/r/microsoft/mssql-server-linux |
|
|
23.04.2019, 08:21:24
Post
#10
|
|
Grupa: Zarejestrowani Postów: 251 Pomógł: 0 Dołączył: 21.01.2010 Skąd: Nowy Sącz Ostrzeżenie: (0%) |
wiem, ale program bazodanowy się nie łączy.
|
|
|
23.04.2019, 08:27:01
Post
#11
|
|
Grupa: Moderatorzy Postów: 36 447 Pomógł: 6292 Dołączył: 27.12.2004 |
To znaczy ze zle skonfigurowaliscie albo jedno albo drugie i zamiast to poprawic to robicie niesamowity "hak" przez wirtualke windows... ale patrzac po hakach w kodzie php to juz mnie nic u Was nie zdziwi
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
26.04.2019, 09:12:08
Post
#12
|
|
Grupa: Zarejestrowani Postów: 251 Pomógł: 0 Dołączył: 21.01.2010 Skąd: Nowy Sącz Ostrzeżenie: (0%) |
tak tak łatwo oceniać ale rozczaruje cie, baza mssql na debianie poprawnie działa z php, AdminSQL, SSMS a program magazynowy nie może się z nią podłączyć i skoro kilku opiekunów próbowało konfigurować i lipa a programiści od programu magazynowego badają temat to jednak ciężko podważyć ich wiedzę, przynajmniej takie jest moje zdanie w tym temacie.
Ten post edytował adi456 26.04.2019, 09:13:05 |
|
|
26.04.2019, 10:04:38
Post
#13
|
|
Grupa: Zarejestrowani Postów: 965 Pomógł: 285 Dołączył: 19.06.2015 Skąd: Warszawa Ostrzeżenie: (0%) |
No moje zdanie jest takie, że skoro działa poprawnie z PHP, AdminSQL itd. to jednak programiści od programu magazynowego czegoś po prostu nie ogarniają. A stawianie wirtualki z windowsem nie jest ani wydajne ani potrzebne. Jeśli już musi być windows, to po prostu wykupcie serwer z windowsem.
|
|
|
Wersja Lo-Fi | Aktualny czas: 19.04.2024 - 17:23 |