![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 16.10.2006 Ostrzeżenie: (0%) ![]() ![]() |
Krótko i treściwie; ten oto kod:
Kod <?php $isbn = '345-345-123-5423'; $autor = 'Ktos'; $tytul = 'Bamboocha'; $cena = 39.90; $db = new mysqli('localhost', 'ksiazki', 'pass', 'ksiazki'); $stmt = $db->prepare("INSERT INTO ksiazki VALUES (?, ?, ?, ?)"); $stmt->bind_param('sssd', $isbn, $autor, $tytul, $cena); $stmt->execute(); echo $stmt->affected_rows; $stmt->close(); $db->close(); ?> powinien dodać nowy w pełni wypełniony rekord do tabeli ksiazki w bazie ksiazki. Nowy rekord owszem jest dodany, ale pierwsze 3 pola (tekstowe) sa puste, a czwarte (float) ma wartość 0.00. Czy macie jakiś pomysł? Ten post edytował Maf 17.10.2006, 09:38:03 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 749 Pomógł: 37 Dołączył: 3.10.2006 Ostrzeżenie: (0%) ![]() ![]() |
Kod który pokazałeś jest tylko odpowiedzialny za przekazanie danych do klasy... musisz pokazać klasę która to wykonuje...
Pozdro -------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 112 Pomógł: 20 Dołączył: 10.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
Nie wiek jak działa twoja klasa $db, ale na pierwszy rzut oka mogę powiedzieć że w wywołaniu metody prepare() widać, że będzie zapisywanye 4 wartości a w metodzie bind_param() przekazujesz tych wartości 5.
Nie mam pojęcia czy problem jest stąd, ale z tego kodu więcej nie da się wywnioskować. pozdr. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 2 921 Pomógł: 269 Dołączył: 11.08.2005 Skąd: 127.0.0.1 ![]() |
Do powyższych uwag dodam jeszcze jedną.
W zmiennej $cena masz zapisany string, a w bazie masz pole float. Musisz zrzutować typ na float: (float). -------------------- I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 16.10.2006 Ostrzeżenie: (0%) ![]() ![]() |
Jedyne z czym moge się zgodzić póki co to typ zmiennej, więc zmieniłem $cena z ciągu na float, ale problem nie znika.
Co do ilości parametrów w bind_param() to są one podane zgodnie z tym, co widnieje na php.net: http://pl.php.net/manual/pl/function.mysql...-bind-param.php Co do $db, to jest ona egzemplarzem klasy mysqli, więc powinniście wiedzieć jak działa "moja klasa $db" ![]() Ten post edytował Maf 17.10.2006, 09:38:32 |
|
|
![]()
Post
#6
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 112 Pomógł: 20 Dołączył: 10.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
Co do ilości parametrów w bind_param() to są one podane zgodnie z tym, co widnieje na php.net: http://pl.php.net/manual/pl/function.mysql...-bind-param.php Co do $db, to jest ona egzemplarzem klasy mysqli, więc powinniście wiedzieć jak działa "moja klasa $db" ;) True, mea culpa. Nie korzystałem z mysqli_*, stąd taka wpadka. W takim wypadku moje uwagi stały się nietrafione :) pozdr. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 16.10.2006 Ostrzeżenie: (0%) ![]() ![]() |
Eh, napisałem całość podobnie, ale proceduralnie, efekt ten sam :/
Kod <?php
$isbn = "4354-5456"; $autor = "Ktostam"; $tytul = "Bamboocha"; $cena = 49.95; $db_link = mysqli_connect('localhost', 'ksiazki', 'pass', 'ksiazki'); printf("Host information: %s\n", mysqli_get_host_info($db_link)); $query = "INSERT INTO ksiazki VALUES (?, ?, ?, ?)"; $statement = mysqli_prepare($db_link, $query); mysqli_stmt_bind_param($statement, "sssd", $isbn, $autor, $tytul, $cena); mysqli_stmt_execute($statement); printf("%d Row affected\n", mysqli_stmt_affected_rows($statement)); mysqli_stmt_close($statement); mysqli_close($db_link); ?> Ten post edytował Maf 17.10.2006, 10:04:57 |
|
|
![]()
Post
#8
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 112 Pomógł: 20 Dołączył: 10.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
A mógłbyś pokazać te rzeczy:
1. strukturę tabeli ksiazki 2. wynik działania $stmt->bind_param() (powinno zwracać true/false) 3. wynik działania $stmt->execute(); (true/false) pozdr. |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 16.10.2006 Ostrzeżenie: (0%) ![]() ![]() |
1. Struktura tabeli 'ksiazki':
isbn char(13) not null primary key, autor char(50), tytul char(100), cena float(5,2) 2 & 3. Zmienilem kod na: Kod <?php $isbn = '345-345-123-5423'; $autor = 'Ktos'; $tytul = 'Bamboocha'; $cena = 39.90; $db = new mysqli('localhost', 'ksiazki', 'pass', 'ksiazki'); $stmt = $db->prepare("INSERT INTO ksiazki VALUES (?, ?, ?, ?)"); echo 'bind_param: '.$stmt->bind_param('sssd', $isbn, $autor, $tytul, $cena)."\n"; echo 'execute: '.$stmt->execute()."\n"; echo 'affected_rows: '.$stmt->affected_rows."\n"; $stmt->close(); $db->close(); ?> Wyniki: Kod bind_param: 1
execute: 1 affected_rows: 1 |
|
|
![]()
Post
#10
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 112 Pomógł: 20 Dołączył: 10.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
Przejrzałem jeszcze raz przykład z manuala (http://pl.php.net/manual/pl/function.mysql...-bind-param.php)
i problem leży chyba w kolejności wywołania metody bind_param(), która powinna być wywołana przed nadaniem wartości parametrom: (przykład z manuala)
Sprawdź, powinno być OK IMHO. pozdr. |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 16.10.2006 Ostrzeżenie: (0%) ![]() ![]() |
Już to próbowałem, ale dla Ciebie jeszcze raz to zrobiłem. Wyniki bez zmian, rekord dalej błędny :/
Jeśli ktoś mógłby to odpalić u siebie i podzielić sie efektem to byłbym bardzo wdzięczny. Oto tabela: Kod create table ksiazki ( isbn char(13) not null primary key, autor char(50), tytul char(100), cena float(5,2) ); BTW: mam php-5.1.6-r4 i mysql-4.1.21 Założyłem nawet nowa baze danych z nowiutka tabela i owy wadliwie dodany rekord wygląda tak: Kod +------+-------+-------+------+ | isbn | autor | tytul | cena | +------+-------+-------+------+ | | | | 0.00 | +------+-------+-------+------+ 1 row in set (0.00 sec) Pozdrawiam. Ten post edytował Maf 17.10.2006, 11:21:33 |
|
|
![]()
Post
#12
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 112 Pomógł: 20 Dołączył: 10.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
Nie mam w tej chwili dostępu do żadnej instalacji PHP5... Jeżeli nikt mnie nie uprzedzi to wieczorem mogę to w domu przetestować. Zaznaczam jednak, że nie mam żadnego doświadczenia jeżeli chodzi o mysqli_*.
pozdr. |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 16.10.2006 Ostrzeżenie: (0%) ![]() ![]() |
Heh no właśnie, bo i tak pytam o to wszystko z czystej ciekawości;) Ten kod np. działa jak trzeba, i jest prostszy jak widać;)
Kod <?php
$isbn = '345-345-123-5423'; $autor = 'Ktos'; $tytul = 'Bamboocha'; $cena = 39.90; $db = new mysqli('localhost', 'ksiazki', 'pass', 'test'); $db->query("INSERT INTO ksiazki VALUES ('$isbn', '$autor', '$tytul', $cena)"); $db->close; ?> |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 93 Pomógł: 5 Dołączył: 30.04.2006 Skąd: Gliwice Ostrzeżenie: (0%) ![]() ![]() |
No to czas chyba coś napisać
![]() 1) Upewnij się że masz włączoną bibliotekę mysqli ![]() ![]() 2) U mnie wszystko działa ok, więc nie jest to wina ani skryptu, ani struktury tabeli. Będzie to zatem wina oprogramowania ![]() Z tym raczej będziesz musiał poradzić sobie sam. Może że jakieś ważne ustawienia są które to blokują, ale tego to ja już nie wiem |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 16.10.2006 Ostrzeżenie: (0%) ![]() ![]() |
1. mam mysqli wkompilowane specjalnie do mysql'a, bo już przy pierwszym podejściu narzekał na brak klasy jakiejśtam, także to nie to.
2. mówisz że Ci działa, hm ![]() Każdy kto ma chwilkę wolną, niech sprawdzi czy u niego działa, a jeśli przypuszczacie ze to wina configu, to dajcie znać co to może być;] EDIT: Jest postęp, zainstalowałem na desktopie php i mysql'a (tym razem w wersji 5.*) i problem zniknął ![]() Ten post edytował Maf 17.10.2006, 18:53:24 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 20:04 |