Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: INSERT raz dziala raz nie :(
Forum PHP.pl > Forum > PHP
KRIS_PL
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 sad.gif ma ktoś jakis pomysł?
sf
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
FliSs_tCv
Ja moje połączenie z bazą mam takie spróbuj na tym mi zawsze działa wstawi po prostu swoje dane i zapytanie 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ę 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 winksmiley.jpg
KRIS_PL
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. ?>
FliSs_tCv
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 smile.gif
KRIS_PL
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 smile.gif



Taki 'NULL' nie przechodzi
Ar2r
Jeśli pole może być NULL to nie musisz podawać go w instrukcji insert. Pomiń deklaracje nb_of_or i NULL w zapytaniu.
Cezar708
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()
franki01
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.
KRIS_PL
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.