Oto co na razie wymęczyłem: (połączenie z bazą, oraz wyświetlenie zawartości jednej z tabel)
<?phpclass sql{$mysqli;$que;connect(){$host="mysql.cba.pl";$user="drobok";$pass="qwerty";$db="not4you_tk";mysqli($host, $user, $pass, $db);
Oto co na razie wymęczyłem: (połączenie z bazą, oraz wyświetlenie zawartości jednej z tabel)
<?phpclass sql{$mysqli;$que;connect(){$host="mysql.cba.pl";$user="drobok";$pass="qwerty";$db="not4you_tk";mysqli($host, $user, $pass, $db);
Tak na oko, to public/private masz wszędzie na odwrót, niż być powinno. Private to dostępne z wnętrza klasy, Public to dostępne z zewnątrz. Jeżeli nic nie wyświetla, to może włącz gdzieś wyświetlanie wszystkich błędów i ostrzeżeń.
EDIT:
A nie, przy:
private $mysqli;
private $que;
jest dobrze
Za dużo zmian. Ogólnie list_dzial powinien być public, a do reszty odwołuje się z konstruktorów. Dalej nie wywala żadnych błędów /wyników.
<?phpclass sql{$mysqli;$que;connect(){$host="mysql.cba.pl";$user="drobok";$pass="qwerty";$db="not4you_tk";mysqli($host, $user, $pass, $db);
Po włączeniu ostrzeżeń:
Rzeczywiście miałem wyłączone raportowanie błędów. Co może być przyczyną tego błędu ?
do każdej “globalnej” zmiennej i funkcji w klasie w php musisz dodać słówko " $this->"
czyli
to jak gdzieś uzywasz metody albo zmiennej to:
Albo tu:
– Dodane 07.04.2012 (So) 14:42 –
Jeszcze onośnie
private function select(){
$mysqli->query($que);
if ($mysqli->connect_errno)
$mysqli->connect_errno;
return $mysqli->fetch_array(MYSQLI_NUM);
}
to poczytaj http://www.php.net/manual/en/book.mysqli.phpa na szybko to tak wygląda zwracanie wyników
if ($result = $mysqli->query($query)) {
/* fetch associative array */
while ($row = $result->fetch_assoc()) {
printf ("%s (%s)\n", $row["Name"], $row["CountryCode"]);
}
/* free result set */
$result->free();
}
<?php(E_ALL | E_STRICT); class editor{ private function sql($query){ $host="mysql.cba.pl"; $user="drobok"; $pass="qwerty"; $db="not4you_tk"; $con = new mysqli($host, $user, $pass, $db); return $con-query($query); } public function __construct($password){ if(!$this-pass($password)) echo 'zle haslo'; } ($pass){ if(!isset($pass))return false; $res=$this-sql("SELECT pass FROM test_haslo WHERE `pass`='".$pass."' LIMIT 1"); if($res-num_rows=0) return false; return true; } public function list_dzial(){ $res=$this-sql("SELECT nr,tytul,acc,ile,ilosc FROM test_dzial"); $lista=$res-fetch_array(MYSQLI_ASSOC); $i=0; foreach($lista as $linia){ $testy[$i][0]= $linia['nr']; $testy[$i][1]= $linia['tytul']; $testy[$i][2]= $linia['acc']; $testy[$i][3]= $linia['ile']; $testy[$i][4]= $linia['ilosc']; $i++; } return json_encode($testy); } } = new editor('qwerty'); echo $zap-list_dzial();?[/code]
Dzięki waszym poradom dobrnąłem do końca :) Wywaliłem klasę sql, bo tylko zwiększała ilość kodu :)
Dlaczego twoim zdaniem while, jest lepszy niż http://php.net/manual/en/mysqli-result.fetch-array.php ?
//edit, @ostanie zdanie, coś mi ten foreach nie działa, nie wiem dlaczego, więc skorzystam z twojego rozwiązania tx :)
//tutaj moje pasy były
Twoja klasa jest źle zaprojektowana. Wiesz co zajmuje najwięcej czasu w połączeniu PHP z MySQL ? Właśnie połączenie, nie zerwanie połączenia, nie wykonanie zapytania ale połączenie. A w Twoim kodzie takie połączenie będzie wykonywane tyle razy ile tylko wykonasz zapytanie…
Rzeczywiście, dobra rada, zapomniałem zmienić jak dodałem pass
<?php ("Content-Type: text/plain");