Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapytanie do MySQL
Forum PHP.pl > Forum > PHP
jml
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.
bne
Kod
<?php
$result = $connect -> query("insert into user(username, pass, email, number) values('".$user."',sha1('".$pass."'),'".$email."',".$number.")");
?>
jml
Ciągle nie działa.
bne
A poprawiłeś pass na password? Czy przepisałeś to co podałem nawet nie sprawdzając co tam pisze?
jml
Sorki, nie zauważyłem... Poprawione i też nie działa.
siemakuba
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.
jml
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?
Cienki1980
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".
jml
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?
siemakuba
  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.
jml
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.
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.