Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> INSERT raz dziala raz nie :(
KRIS_PL
post
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 29.07.2005

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


Witam

Mam PHP 5.2.5 + IIS 5 na Windows2000Server + MySql 5.

I taki insert:

  1. @ $db = mysql_pconnect("localhost", "root", "");
  2. IF (!$db)
  3. {
  4. echo "Błąd: Nie można połączyć się z bazą danych. Spróbuj później.";
  5. exit;
  6. }
  7. mysql_select_db("orders");
  8. $query = "INSERT INTO _order (data, out_ofert, out_prov, prov_address, nb_of_ord, text_ord, apply_message, our_person, apply_or_no, servisco, year_of_ord, cena) VALUES (NOW(), '$out_ofert', '$out_prov', '$prov_address', NULL, '$text_ord', '$apply_text', '$facet', '3', '$servisco', 2007, '$cena')";


Klient wypełnia w formularzu większość zmiennych i one przechodzą, sprawdzałem echem, ale zdarza się tak i nie ma na to reguły, że rekord nie jest dodawany, mimo że zmienne przechodzą to mysql_insert_id() = 0 i kiła.
Podejrzewam pole "nb_of_or' i ten NULL, pole jest autoincrement i wcześniej (na Mysql 3, PHP4 i Apache mialam zamiast: NULL, tylko: ' ' i rekord się dodawał) po migracji z Apache na IIS5 PHP 5.2.5 i MYSQL 5 zmieniłem to: ' ' na NULL bo był właśnie taki efekt że insert się wywalal na tym, ale problem nie zniknął do końca (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) ma ktoś jakis pomysł?

Ten post edytował KRIS_PL 6.12.2007, 11:55:26
Go to the top of the page
+Quote Post
sf
post
Post #2





Grupa: Zarejestrowani
Postów: 1 597
Pomógł: 30
Dołączył: 19.02.2003
Skąd: Tychy

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


Z Twojego tłumaczenia trudno coś zrozumieć.. jeśli nie działa insert to zrób obsługę błędów.

mysql_error() i zapisuj błędy do pliku
Go to the top of the page
+Quote Post
FliSs_tCv
post
Post #3





Grupa: Zarejestrowani
Postów: 198
Pomógł: 3
Dołączył: 27.02.2007
Skąd: Tczew

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


Ja moje połączenie z bazą mam takie spróbuj na tym mi zawsze działa wstawi po prostu swoje dane i zapytanie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

  1. <?php
  2. $sql_serwer="host";
  3. $sql_login="login";
  4. $sql_haslo="haslo";
  5. $sql_baza="baza";
  6. $sql_tabela="tabela";
  7.  
  8. mysql_connect($sql_serwer, $sql_login, $sql_haslo);
  9. mysql_select_db($sql_baza);
  10. mysql_query('SET CHARSET latin2'); 
  11. $wynik = mysql_query(" Twoje zapytanie ");
  12. while($wynik and $dane = mysql_fetch_assoc($wynik)) {
  13. echo "<div style=\"\"> Wyświetlasz co tam chcesz ;) np. $dane[id]) </div>";
  14.  }
  15. ?>

Jakby to nie było związane ze złym zapisem łączenia się z baza pomyślimy dalej (dopiero wstałem więc nie myślę (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) ) ale na oko wydaje mi się że to zapytanie jest coś nie teges i z reguły właśnie zapytanie niesie za sobą czy coś się wyświetli czy nie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
KRIS_PL
post
Post #4





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 29.07.2005

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


Do bazyłączy się poprawnie za każdym razem, w przeciwnym wypadku dostałbym błąd z tego kodu:

  1. <?php
  2. @ $db = mysql_pconnect("localhost", "root", "");
  3. if (!$db)
  4. {
  5. echo "Błąd: Nie można połączyć się z bazą danych. Spróbuj później.";
  6. }
  7. ?>


Ten post edytował KRIS_PL 6.12.2007, 12:38:55
Go to the top of the page
+Quote Post
FliSs_tCv
post
Post #5





Grupa: Zarejestrowani
Postów: 198
Pomógł: 3
Dołączył: 27.02.2007
Skąd: Tczew

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


nie znam się do końca na sql ale może tak to nul zapisac jak reszte

  1. DATA, out_ofert, out_prov, prov_address, nb_of_ord, text_ord, apply_message, our_person, apply_or_no, servisco, year_of_ord, cena) VALUES (NOW(), '$out_ofert', '$out_prov', '$prov_address', 'NULL', '$text_ord', '$apply_text', '$facet', '3', '$servisco', 2007, '$cena'


spróbować nie zaszkodzi (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
KRIS_PL
post
Post #6





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 29.07.2005

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


Cytat(FliSs_tCv @ 6.12.2007, 12:55:02 ) *
nie znam się do końca na sql ale może tak to nul zapisac jak reszte

'NULL', '$text_ord', '$apply_text', '$facet', '3', '$servisco', 2007, '$cena'.....


spróbować nie zaszkodzi (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)



Taki 'NULL' nie przechodzi
Go to the top of the page
+Quote Post
Ar2r
post
Post #7





Grupa: Zarejestrowani
Postów: 140
Pomógł: 16
Dołączył: 12.06.2002
Skąd: Kielce

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


Jeśli pole może być NULL to nie musisz podawać go w instrukcji insert. Pomiń deklaracje nb_of_or i NULL w zapytaniu.
Go to the top of the page
+Quote Post
Cezar708
post
Post #8





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

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


hmm zapytanie wygląda dobrze, więc skoro "raz wchodzi, raz nie" to problemem mogą być dane wejściowe. Jest szansa, że nie eskapujesz danych wejściowych, przez co może wywalać Ci zapytanie (syntax error).

tak jak napisał sf użyj mysql_error() (lub usuń '@' sprzed mysql_query()) i jeśli będą Ci wyskakiwały błędy typu `syntax error` to użyj mysql_escape_string() w następujący sposób:

  1. <?php
  2. // .. wczesniejszy kod
  3.  
  4. // wszedzie gdzie moga wystapic dziwne znaki typu apostrof i cudzyslow
  5. // na przyklad:
  6.  
  7. $text_ord = mysql_escape_string($text_ord);
  8. $prov_address = mysql_escape_string($prov_address);
  9.  
  10. $query = "INSERT INTO _order (data, out_ofert, out_prov, prov_address, nb_of_ord, text_ord, apply_message
    , our_person, apply_or_no, servisco, year_of_ord, cena) VALUES (NOW(), '$out_ofert', '$out_prov', '$prov_address', NULL, '$text_ord', '$apply_text', '$facet', '3', '$servisco', 2007, '$cena')"
    ;
  11. ?>


.. ale na pewno najwięcej o błędzie powie Ci mysql_error()
Go to the top of the page
+Quote Post
franki01
post
Post #9





Grupa: Zarejestrowani
Postów: 508
Pomógł: 75
Dołączył: 2.11.2005
Skąd: Bydgoszcz

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


MySQL nie wykonuje zapytania jak baza/tabela/pole ma charset utf8, a dane sa w iso. To dotyczy sytuacji, gdy w zapytaniu jest jakas polska litera itp. Moze tez to bazy danych jest generowane zbyt dlugie zapytanie. Limity sa duze, ale moze nie wystarcza.

Ten post edytował franki01 6.12.2007, 19:00:34
Go to the top of the page
+Quote Post
KRIS_PL
post
Post #10





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 29.07.2005

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


Dzięki za pomoc, okazało się trywialne, mysql_error() wykazał że pole w bazie jest za krótkie, i od czasu do czasu po prostu było out of range, w zależności ile user znaków napisał, co ciekawe w wersji MySql 3, (bo z takiej migrowałem do MySql 5), też takie sytuacje miały miejsce, ale z automatu obcinał od końca dane i ładowal do bazy bez problemów, teraz jak przejrzałem starą to rzeczywiście dane są po obcinane, na szczęście -jest to zazwyczaj tylko oznaczenie waluty które nie było istotne, ale fakt że wciągał to do bazy i obcinał sobie tyle ile mu pasowało trochę mnie dziwi.

Ten post edytował KRIS_PL 10.12.2007, 08:19:46
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.09.2025 - 20:38