Jak połączyć się do bazy MySQL za pomocą mysqli? Konfiguracja.

0

Zainstalowałam serwer apache2 na windows 7 i do tego php + MySQL , więc standard, dokonałam podstawowych zmian w konfiguracji aby umożliwić poprawne uruchomienie apache MySQL i php. Serwer działa, skrypty php są wykonywane, MySQL działa z konsoli mogę wprowadzać dane, tworzyć bazy etc. Kiedy jednak chcę połączyć się z MySQL używając php, następuję taka sekwencja : w adresie widzę plik który ma wykonać zalogowanie do bazy login.php i strona jest kompletnie pusta nie następuję przeniesienie do odpowiedniej strony. Gdy pomijam łączenie skrypt wykonuje się prawidłowo.

W pliku php.ini-production wpisałam to:

extension_dir = "c:/php/ext"
extension=php_mysqli.dll

Nie pomogło.

Sprawdziłam czy php_mysqli.dll jest w podanym katalogu. Tak, jest.

Kod to:

<?php

$login=$_POST['login'];
$haslo=$_POST['haslo'];
$polaczenie = @new mysqli('localhost', 'root', '', 'LOGOWANIE');
if (mysqli_connect_errno() != 0)
{
	echo ('Wystąpił błąd połączenia: ' );
}
else{

	if((isset($login) )&&(isset($haslo)))
	{
		if($login=='ania' && $haslo=='mala')
			{
				session_start();
				$_SESSION["login"]=$login;
				header("Location: index.php?" . SID);
				exit();
			}
			else{
				echo('Nie poprawny login, lub hasło');
			
			}

	}
	else
       {
		echo('Nie podałeś danych');

	}
}
	
?>

Mam najnowsze wersje programów.

Ps Zdaje sobie sprawę że ukazany tu skrypt jest kompletnie nie zabezpieczony przed niczym, że sposób uwierzytelniania jest bezsensowny, nie funkcjonalny etc. Chodzi mi jednak o samo nawiązanie połączenia. Jakiś czas temu pisałam w miarę poprawne skrypty walidacji, uwierzytelniania, było to jednak na XAMPP i chciałam przenieść się na własny serwer a nie korzystać z gotowej paczki.

0
<?php 
// nawiazujemy polaczenie 
$connection = @mysqli_connect('localhost', 'uzytkownik', 'haslo')
// w przypadku niepowodznie wyświetlamy komunikat 
or die('Brak połączenia z serwerem MySQL.<br />Błąd: '.mysql_error()); 
// połączenie nawiązane ;-) 
echo "Udało się połączyć z serwerem!<br />"; 
// nawiązujemy połączenie z bazą danych 
$db = @mysqli_select_db('nazwa_bazy', $connection) 
// w przypadku niepowodzenia wyświetlamy komunikat 
or die('Nie mogę połączyć się z bazą danych<br />Błąd: '.mysql_error()); 
// połączenie nawiązane ;-) 
echo "Udało się połączyć z bazą dancych!"; 
// zamykamy połączenie 
mysqli_close($connection); 

?> 
1

kto dziś tak łączy się z bazą?
Używaj PDO

0

Jest błąd po stronie konfiguracji, lub coś takiego. Podany przeze mnie skrypt jest na 95% poprawny. Czemu nie 100%? Bo nie mam jak teraz to przetestować ale na XAMPP działał, miałam tego trochę ale z tego co pamiętam to ten działał.

panryz To samo, powinno być cokolwiek a tu biała plama.

sfan Ja :P a tak na poważnie nie ma to dla mnie w tej chwili znaczenia, chce rozwiązać problem, a nie uciekać do innego rozwiązania, nie zamierzam na razie użytkować z innych baz danych niż MySQL. Jednak wezmę Twoją sugestię pod uwagę i to będzie następna rzecz jaką się zajmę, zaraz po przypomnieniu php i mysqli.

Czy pomijając elastyczność implemetacji PDO, ma jakąś przewagę nad mysqli lub mysqli nad PDO?

Ps Rozumiem że nie ma sensu w przyszłości uczyć się specyficznych metod dla innych baz, tak?

0

PDO chroni Cie też przed SQL Incjection

0

A próbowałaś w ogóle wyrzucić na ekran info o poprawności połączenia z bazą danych? W Twoim kodzie nie widzę takiej linijki.

0

Co masz dokładnie na myśli? Chodzi Ci o pokazanie jaki błąd mysqli_connect_error(); Czy masz coś innego na myśli?

0

Chodzi mi o to że jak logujesz się do bazy to żeby Cię o tym poinformowało.

 $connection = @mysqli_connect('localhost', 'uzytkownik', 'haslo','baza_danych')
// w przypadku niepowodznie wyświetlamy komunikat 
or die('Brak połączenia z serwerem MySQL.<br />Błąd: '.mysqli_error()); 
// połączenie nawiązane ;-) 
echo "Udało się połączyć z serwerem!<br />"; 
0

Jeśli zaloguję do bazy mam instrukcje które mają się wykonać, brak ich wykonania jest dla mnie równoważny z brakiem połączenia. Sprawdzam czy jest jakiś błąd jeśli tak, wyświetlam w innym wypadku powinno wykonać się else ja za to nie mam ani else ani komunikatu tylko malowniczy biały krajobraz.

0

Nie rozumiem po co ten znak małpy przed mysqli_connect. Przecież istotą problemu jest znalezienie błędu. To czemu go wyłączacie...?

lightinside napisał(a):

Jeśli zaloguję do bazy mam instrukcje które mają się wykonać, brak ich wykonania jest dla mnie równoważny z brakiem połączenia

Ciekawa teoria. Ja myślałem że brak połączenia jest związany z jakimś błędem w logu czy wyrzuconym na ekran. Coś w stylu ala accesss denided....

0

Jeśli mamy pętlę, sprawdzamy czy są błędy, błąd ma inny numerek niż 0 to komunikat. Inaczej czyli kiedy błędu nie ma mają ukazać się następujące instrukcję źle myślę?

Ciekawa teoria. Ja myślałem że brak połączenia jest związany z jakimś błędem w logu czy wyrzuconym na ekran. Coś w stylu ala accesss denided....

Nie martw się, kod kolegi powyżej również daje malowniczy biały krajobraz.

Szukałam error log czy coś takiego, nie ma.(Już dawno ).

Nie rozumiem po co ten znak małpy przed mysqli_connect. Przecież istotą problemu jest znalezienie błędu. To czemu go wyłączacie...?

Ponieważ nie dokońca rozumiemy co robimy. Mówię za siebie myślałam że małpa jest odpowiedzialna za... a może mniejsza o to. Po wyrzuceniu małp mam równie biały ekran jak wcześniej :D.

Any Idea?

0

Na moje to coś jest nie tak z logowaniem do bazy. Albo login albo hasło. A może brak uprawnień do logowania ?

A może pokażesz większy kawałek kodu, o ile taki masz.

0

Loguję się rootem, więc raczej uprawnienia są.

Chcesz formularz? :D

To jest cały kod, bo to miało być jedynie przypomnienie a wyszła z tego... biała plama

0

na początku skryptu:

error_reporting(E_ALL);
ini_set('display_errors', 1);

usuń wszystkie małpy, wyświetl mysqli_connect_error

0

btw jestem ciekawy do czego myślałeś że służy znak małpy ;)

0

W końcu coś jest:

Fatal error: Class 'mysqli' not found in C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\login.php on line 7

Błąd konfiguracji, sprawdziłam jeszcze używając:

 if (!function_exists('mysqli_init') && !extension_loaded('mysqli')) {
    echo 'We don\'t have mysqli!!!';
} else {
    echo 'Phew we have it!';
}

Tak, ze stackoverflow.

Rzeczywiście nie instalowałam mysqli ale ładowałam,(chyba myślałam że ładuję) mysqli z zewnątrz.

Tak jak pisałam na początku dodałam to:

extension_dir = "c:/php/ext"

Taki jest directory do tego modułu który istnieje (sprawdzałam to, wcześniej).

i odkomentowałam to:

extension=php_mysqli.dll

btw jestem ciekawy do czego myślałeś że służy znak małpy ;)

Może lepiej nie powiem :D

0

Na windowsie używasz backslashe do podawanie ścieżek a nie slash
Czyli:

extension_dir = "c:\php\ext"

I sprawdzaj po ludzku w konsoli poleceniem php -m . Bo z tego co widzę, to nie masz odrębnej konfiguracji dla CLI.
I powinno ruszyć! :)

Jeszcze pytanko: czy extensiona miałaś w pakiecie czy skądś ściągałaś?

0

No wlaśnie go tam nie ma(mysqli), aż otworzyłam oczy ze zdziwienia: Ja mam Zenda?

[PHP Modules]
bcmath
calendar
Core
ctype
date
dom
ereg
filter
ftp
hash
iconv
json
libxml
mcrypt
mhash
mysqlnd
odbc
pcre
PDO
Phar
Reflection
session
SimpleXML
SPL
standard
tokenizer
wddx
xml
xmlreader
xmlwriter
zip
zlib

[Zend Modules]

Po chwili dotarło że jest puste... :P

Ale dlaczego jest [Zend Modules]?

Przecież jest dużo innych frameworków, czemu tylko on tu jest?(pusty bo pusty, ale jest).

Oczywiście połączenie nie działa, co wynika z tego że php nie uznaje mysqli u mnie za moduł.

sfan napisał(a):

Jeszcze pytanko: czy extensiona miałaś w pakiecie czy skądś ściągałaś?

Normalnie ZIP wypakowałam do utworzonego katalogu i katalog ext i extension dla mysqli już tam był, inaczej musiałabym to przekompilować lub coś takiego.

odkomentowałam tylko moduł i dodałam ścieżkę.

Działa, wystarczyło zmienić nazwę na php.ini :D A ja tego nie zrobiłam bo nie wiedziałam że to potrzebne :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1