• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Przejście z mysql na mysqli

Object Storage Arubacloud
+3 głosów
3,294 wizyt
pytanie zadane 9 kwietnia 2015 w PHP przez mowmiheniek Stary wyjadacz (11,900 p.)

Witam ponownie,

Jestem miło zaskoczony ilością i szybkością odpowiedzi na tym forum.

Może pomożecie mi w tym:

Mam plik php gdzie trzymam ustawienia do serwera w postaci klasy.

Niestety naukę zacząłem od mysql i wykonałem parę podstron gdzie wszystkie funkcje są już przestarzałe. Chciałem zmienić na nowe mysqli jak najmniejsza ilością pracy i już siedzę nad tym trzeci dzień.

Poniżej kod już z mysqli, po którym wychodzi błąd: mysqli_query() expects at least 2 parameters. 
Wiem że mysqli_querty potrzebuje dwóch parametrów tylko nie wiem jaki parametr wpisać.

 

class Db{

	//----------------laczenie z serwerem--------------------------------------------------
		
	private $polaczony = null;

	public function polacz(){
		if($this->polaczony){
			return true;
		}
		if(!mysqli_connect('localhost', 'root', '','baza_x')){
			return false;
		}
		
		if(mysqli_query("SET NAMES 'utf8'")){
			$this->polaczony = true;
			return true;
		}
		return false;
	}
	
	public function escape($co){
		return mysqli_real_escape_string($co);
	}
	
	
	// ---------------------- zapytania ---------------------------------------------
	
	public function wybierz($zapytanie){
		if(!$this->polaczony){
			self::polacz();
		}
		return mysqli_query("SELECT ".$zapytanie);
	}
	
	public function add($zapytanie){
		if(!$this->polaczony){
			self::polacz();
		}
		return mysqli_query(polacz,"INSERT INTO ".$zapytanie);
	}
	
	public function replace($zapytanie){
		if(!$this->polaczony){
			self::polacz();
		}
		return mysqli_query(polacz,"INSERT INTO ".$zapytanie);
	}

	public function usun($zapytanie){
		if(!$this->polaczony){
			self::polacz();
		}
		return mysqli_query("DELETE FROM ".$zapytanie);
	}
}

 

Na stronach pytania wykonuje w ten sposób:

require "lib/Db.php";

$baza = new Db();

$rodzaj = $baza->wybierz("idcos, type, size FROM cos");

 

Dziękuję za pomoc.

3 odpowiedzi

+3 głosów
odpowiedź 9 kwietnia 2015 przez Ukis Gaduła (4,580 p.)
wybrane 9 kwietnia 2015 przez mowmiheniek
 
Najlepsza

Spróbuj mysqli_connect('localhost', 'root', '','baza_x') jako pierwszy parametr, a ten który masz aktualnie ustaw jako drugi parametr.

komentarz 9 kwietnia 2015 przez mowmiheniek Stary wyjadacz (11,900 p.)

To działa. Tyle kombinowania... yes

+2 głosów
odpowiedź 9 kwietnia 2015 przez GrzesiekB Gaduła (3,720 p.)
Jak już zmieniasz obsługę łączenia z bazą idź w PDO a nie mysqli. PDO to bardzo uniwersalna biblioteka nie tylko do mySQLa, a prędzej czy później zetkniesz się z innymi typami baz danych - znacznie łatwiej Ci będzie dostosować kod!
komentarz 9 kwietnia 2015 przez efiku Szeryf (75,160 p.)
Zgadzam się w 100% +1!
komentarz 9 kwietnia 2015 przez mowmiheniek Stary wyjadacz (11,900 p.)

No właśnie czekam na kurs PDO Pana Mirosława wink
Trochę się dziwię,że zaczął od mysqli a nie PDO.
Zależy mi na czasie i w miarę bezpiecznym działaniu mojego portalu. Na naukę PDO musiałbym poświęcić trochę czasu którego nie mam. 

komentarz 9 kwietnia 2015 przez GrzesiekB Gaduła (3,720 p.)
Zajrzyj do manuala PHP. To kompendium wiedzy z przykładami. Ja się uczyłem właśnie z oficjalnej dokumentacji. Tak samo jquery. Programista musi znać angielski więc to pewnie nie przeszkoda. Nie czekaj aż Ci ktoś wyłoży kawę na ławę - tak się niczego nie nauczysz! PDO z mySQL pięknie mówi gdzie masz błędy w zapytaniu - jedyne co mnie na początku irytowało to fakt, że nie mogę podejrzeć zapytania końcowego, ale z tym też sobie poradziłem pisząc odpowiednią bibliotekę. Obecnie nie próbuję nawet używać innej biblioteki - łączę się z dwoma typami bazy danych - nie muszę pamiętać składni poleceń dla każdej z nich (orócz róźnic samego SQL) - zapytania wykonujesz zawsze tak samo. To mega usprawnia pracę. Przy bindowaniu dużej ilości zmiennych może Ci się wydawać mozolne, ale warto.

Takie PDO na wyjściu może Ci wyrzucić od razu tablicę obiektów danego typu lub stdClass czy samą tablicę... duzo na tym czasu się oszczędza...
+1 głos
odpowiedź 9 kwietnia 2015 przez wejq Obywatel (1,020 p.)

a czemu nie zrobisz tak ?

rozpisując zapytania na funkcje nic nie zyskujesz.

 

$mysqli = new mysqli('localhost','user','pass','db');
$mysqli->set_charset('utf8');

(w funkcjach dodajesz tylko "global $mysqli")
$result = $mysqli->query("SELECT * FROM user");

 

komentarz 9 kwietnia 2015 przez mowmiheniek Stary wyjadacz (11,900 p.)
Teraz wiem. Ale musiałbym wszystko gruntownie zmienić co do tej pory stworzyłem na bazie przestarzałego kursu. Chciałem to w miarę zrobić szybko bo mam ok. 15 stron z ok. 40 zapytaniami do bazy. Dziękuję w każdym razie za odpowiedź.
komentarz 9 kwietnia 2015 przez GrzesiekB Gaduła (3,720 p.)
40 zapytań do nie jest wysoka cena! Im szybciej to zrobisz tym lepiej dla Ciebie. Osobiście przerabialem swój kod (zapytań pewnie było ok 200) z nieco innego powodu, niemniej jeśli ma się brnąć dalej w złe rozwiązania lepiej jest raz się zebrać, poprawić i dalej już są tylko zyski...
komentarz 10 kwietnia 2015 przez mowmiheniek Stary wyjadacz (11,900 p.)
mógłbyś mi wyjaśnić jak dodać to "global $mysqli" - jak powinna funkcja wyglądać?
komentarz 10 kwietnia 2015 przez wejq Obywatel (1,020 p.)
function addNews($a,$b,$c) {

global $mysqli;

{...}
$mysqli->query(...);

}

 

komentarz 10 kwietnia 2015 przez GrzesiekB Gaduła (3,720 p.)
Stosowanie global nie jest podobno wskazane. Kiedyś czytałem argumenty za i przeciw. Skoro porzuciłem taką możliwość stosowania coś w tym musiało być. Do połączeń z bazą korzystam ze wzorca Singelton, gdzie sprawdza się idealnie.
komentarz 10 kwietnia 2015 przez Boshi VIP (100,240 p.)
Singelton  jest przestarzały, aktualnie DI się używa.
komentarz 11 kwietnia 2015 przez GrzesiekB Gaduła (3,720 p.)
W niektórych przypadkach (2-3) moduły jest dla mnie idealny, więc nie zamierzam tego zmieniać - tym bardziej, że spełnia moje założenia w 100%.

Podobne pytania

0 głosów
1 odpowiedź 249 wizyt
pytanie zadane 9 sierpnia 2015 w PHP przez Else Stary wyjadacz (12,260 p.)
0 głosów
1 odpowiedź 451 wizyt
pytanie zadane 6 lutego 2018 w PHP przez czujek22 Dyskutant (7,670 p.)
0 głosów
0 odpowiedzi 584 wizyt
pytanie zadane 30 października 2017 w PHP przez niezalogowany

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...