Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zapytanie do MySQL, Problem z obiektowym zapytaniem do MySQL
jml
post 10.02.2007, 00:06:48
Post #1





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 8.02.2007

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


Mam taką bazę danych:
  1. CREATE TABLE user (
  2. username varchar(20) NOT NULL PRIMARY KEY,
  3. password char(40) NOT NULL,
  4. email varchar(30) NOT NULL,
  5. number tinyint(7) UNSIGNED NOT NULL
  6. );

Taki skrypt php:
  1. <?php
  2. function reg_register($user, $pass, $email, $number)
  3. {
  4. $connect=connect_db();
  5. $result=$connect->query("select * from user where username='$user'");
  6. if(!$result)
  7. {
  8. throw new exception('Username already exist.');
  9. }
  10. // zapisanie wyniku do bazy danych
  11. $result=$connect->query("insert into user values('$user',sha1('$pass'),'$email','$number')");
  12. if(!$result)
  13. {
  14. throw new exception('MySQL server is offline, please try again later.');
  15. }
  16. }
  17. }
  18. ?>

Nie działa mi kod w tym miejscu:
  1. <?php
  2. $result=$connect->query("insert into user values('$user',sha1('$pass'),'$email','$number')");
  3. ?>
W tym miejscu wywala mi błąd.

Co muszę poprawić? Siedzę już nad tym sporo czasu i w necie nic nie znalazłem. Chcę to zrobić obiektowo.

Ten post edytował jml 10.02.2007, 00:17:22
Go to the top of the page
+Quote Post
bne
post 10.02.2007, 00:44:14
Post #2





Grupa: Zarejestrowani
Postów: 83
Pomógł: 1
Dołączył: 18.10.2006

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


Kod
<?php
$result = $connect -> query("insert into user(username, pass, email, number) values('".$user."',sha1('".$pass."'),'".$email."',".$number.")");
?>


Ten post edytował bne 10.02.2007, 00:46:37


--------------------
Darmowa wyszukiwarka MP3
Go to the top of the page
+Quote Post
jml
post 10.02.2007, 00:57:58
Post #3





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 8.02.2007

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


Ciągle nie działa.
Go to the top of the page
+Quote Post
bne
post 10.02.2007, 01:00:03
Post #4





Grupa: Zarejestrowani
Postów: 83
Pomógł: 1
Dołączył: 18.10.2006

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


A poprawiłeś pass na password? Czy przepisałeś to co podałem nawet nie sprawdzając co tam pisze?


--------------------
Darmowa wyszukiwarka MP3
Go to the top of the page
+Quote Post
jml
post 10.02.2007, 01:07:30
Post #5





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 8.02.2007

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


Sorki, nie zauważyłem... Poprawione i też nie działa.
Go to the top of the page
+Quote Post
siemakuba
post 10.02.2007, 01:39:59
Post #6





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

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


Cytat
Chcę to zrobić obiektowo.
Zacznij od nieobiektowego mysql_error zaraz po zapytaniu i pokaż/przeanalizuj zwrócony błąd. To, że wywala ci błąd niestety mówi niewiele ;)

pozdr.
Go to the top of the page
+Quote Post
jml
post 10.02.2007, 02:20:18
Post #7





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 8.02.2007

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


Mam w bloku catch coś takiego:
  1. catch(exception $e)
  2. {
  3. make_head1(error);
  4. ?> <!-- w tym bloku metatagi i style, wszystko co w head oprócz title -->
  5. <style type="text/css">@import url("style.css");</style>
  6. <?php
  7. make_head2();
  8.  
  9.  
  10. echo $e->getmessage();
  11.  
  12. make_side(1);
  13. make_foot();
  14. }


Niestety 'echo $e->getmessage();' nie pokazuje mi żadnego komunikatu o błędzie - czy coś tu jest źle tzn w żądaniu komunikatu błędu?

Próbowałem uzyskać błąd za pomocą mysql_error() ale po pierwsze nie wiem jak to zastosować dokładnie (tzn stosowałem, bez rezultatu), po drugie musiałbym sporo przerobić żeby wywołać komunikat o o błędzie tą funkcją.

'echo $e->getmessage();' powinno chyba pokazać komunikat błędu, prawda?
Go to the top of the page
+Quote Post
Cienki1980
post 10.02.2007, 08:24:25
Post #8





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

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


Skoro nie wiesz jak posłużyć się mysql_error() to wyświelt zapytanie które tworzysz w 11 lini tego kodu co pokazałeś.
Dla pewności zrób np tak:
  1. <?php
  2. echo "insert into users .....";
  3. ?>

Zobacz co Ci powie phpMyAdmin bądź też jakieś inne narzędzie do MySQL'a z którego korzystasz podczas próby wykonania tego zapytania "z ręki".


--------------------
404
Go to the top of the page
+Quote Post
jml
post 10.02.2007, 13:46:27
Post #9





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 8.02.2007

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


Ok, wszystko jest w porządku. Błąd znalazłem wpisując zapytanie do bazy z wiersza poleceń.

Cały skrypt jest w porządku, błąd był w pliku sql tworzącym bazę, wystarczyło zmienić tinyint na int w kolumnie 'number' (za dużych liczb używałem jak na tinyint). Ehhh, 2 dni szukałem tego błędu... No ale nic, dziękuję wszystkim za pomoc smile.gif

Jeszcze jedno pytanie, odnośnie tego fragmentu powyższego kodu:
  1. <?php
  2. $result=$connect->query("select * from user where username='$user'");
  3. if(!$result)
  4. {
  5. throw new exception('Query to database not successed.');
  6. }
  7. if(!$connect->num_rows>0)
  8. {
  9. throw new exception('Username already exist.');
  10. }
  11. ?>
Sprawdza on, czy podany user instnieje już w bazie danych. Jeśli jednak w bazie jest user o nazwie 'ktos', a chcemy zarejestrować nowego usera 'ktos1', to wywali nam, że taki już istnieje. Jak zrobić, żeby nie można było zarejestrować tylko identycznego usera, a nie też takiego, który ma podobny człon jak podawany w formularzu?

Ten post edytował jml 10.02.2007, 13:50:11
Go to the top of the page
+Quote Post
siemakuba
post 10.02.2007, 14:55:53
Post #10





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

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


  1. <?php
  2. if(!$connect->num_rows>0)
  3. ?>

No, nie wiem co tam się dzieje w twoim obiekcie $connect, ale ten warunek chyba trochę przekombinowałeś. Sprawdzasz czy są już rekordy z pasującym loginem ($connect->num_rows>0) ale na początek odwracasz logiczną wartość tego sprawdzenia przez !. Czyli tak naprawdę, warunek się sprawdzi jeżeli nie będzie żadnych rekordów zwróconych przez zapytanie. IMHO usunięcie wykrzyknika powinno wystarczyć.

pozdr.
Go to the top of the page
+Quote Post
jml
post 10.02.2007, 19:29:28
Post #11





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 8.02.2007

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


Cytat(siemakuba @ 10.02.2007, 14:55:53 ) *
  1. <?php
  2. if(!$connect->num_rows>0)
  3. ?>

No, nie wiem co tam się dzieje w twoim obiekcie $connect, ale ten warunek chyba trochę przekombinowałeś. Sprawdzasz czy są już rekordy z pasującym loginem ($connect->num_rows>0) ale na początek odwracasz logiczną wartość tego sprawdzenia przez !. Czyli tak naprawdę, warunek się sprawdzi jeżeli nie będzie żadnych rekordów zwróconych przez zapytanie. IMHO usunięcie wykrzyknika powinno wystarczyć.

pozdr.

Dzięki, poza tym powinienem wywoływać to na rzecz obiektu 'result' smile.gif Teraz działa.

Ten post edytował jml 10.02.2007, 19:53:32
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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 01:48