Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP: mysql_connect ei toimi

Sivun loppuun

riksu [24.03.2018 13:18:40]

#

Moikka!

Yritin ajaa esimerkkikkoodia:

<?php
//muodostetaan yhteys tietokantapalvelimeen
$yhteys = mysql_connect() or die("Yhdistäminen ei onnistunut!");

//valitaan tietokanta "testi"
mysql_select_db("testi", $yhteys) or die("Tietokantaa ei löytynyt!");

//tähän tulevat tietokantakyselyt!

//suljetaan yhteys
mysql_close($yhteys);
?>

mutta tulee virheilmoitus: "Fatal error: Uncaught Error: Call to undefined function mysql_connect() in C:\xampp\htdocs\PHP\Ohjelmointiputkan testit\Yhteyden muodostaminen.php:9 Stack trace: #0 {main} thrown in C:\xampp\htdocs\".

Miten saan virheen korjattu ja muodostaa yhteyten palvelimeen?

peran [24.03.2018 15:51:21]

#

Saatko toimimaan PDO:n kautta, joka on nykyaikaisempi tapa käsitellä php:lla tietokantoja ?

https://www.ohjelmointiputka.net/oppaat/opas.php?tunnus=mysqlphp01
https://www.ohjelmointiputka.net/oppaat/opas.php?tunnus=mysqlphp02

Edit - Tosiaan toi Antin tekemä Osa 8 on hivenen vanhentunut, ja onhan sillä ikääkin...

Edit - Mikäli haluat varmasti tehdä tuolla vanhahtavalla tavalla, niin se menneen jotenkin näin...

<?php
//muodostetaan yhteys tietokantapalvelimeen
//En jaksa säätää tämän kautta... $yhteys = mysql_connect() or die("Yhdistäminen ei onnistunut!");
$yhteys = mysql_connect("localhost", "käyttäjä", "salasana") or die("Yhdistäminen ei onnistunut!");;
//valitaan tietokanta "testi"
mysql_select_db("testi", $yhteys) or die("Tietokantaa ei löytynyt!");

//tähän tulevat tietokantakyselyt!

//suljetaan yhteys
mysql_close($yhteys);
?>

riksu [24.03.2018 17:29:30]

#

Kiitos ehdotuksesta, PDO:ta katson myöhemmin.
Valitettavasti ehdottamasi koodiversio heittää samanlaisen virheilmoituksen, kuin edessä oli mainittu. Haluaisin kuitenkin tietää, mihin tämä virheilmoitus viittaa, kun olen tässä opettelemassa PHP:ta. Niin tiedän jatkossa virheen aiheuttajaa. Joku määrittelu mättää?

Voisiko joku testata omalla koneella sitä koodipätkää ja tutkia asiaa?
Miten koodi pitää korjata, jotta se toimisi?

peran [24.03.2018 17:37:43]

#

Olethan muuttanut "käyttäjä" omasi MySQL-käyttäjäkseksi ja "salasana":n kyseisen MySQL-käyttäjän salasanaksi ?

Mikäli et, niin helpoiten se onnistuu phpmyadmin:n avulla.

Siis asentamalla phpmyadmin.

phpadminin asentaminen vaihtelee eri alustojen mukaan, joten tässä ei sitä kannata ryhtyä opettamaan.

Hakusanat LAMP (linux-ympäristö)
ja WAMP (Windows-ympäristö) auttaneen tämän ympäristön tekemisessä.

Edit -
Googlaamalla erroria löytyi, ettei kyseiset funktiot ole enää voimassa php 7:ssä.
https://stackoverflow.com/questions/34579099/fatal-error-uncaught-error-call-to-undefined-function-mysql-connect

Joten joudut tekemään sen PDO:n kautta.

riksu [24.03.2018 19:54:46]

#

Kiitti linkistä.
Tuli ilmi, että mysql_connect()-funktion sijasta pitää käyttää mysqli_connect()-funktiota. Lisäämällä i kirjaimen funktioniin pääsee yläpuolella ilmennyt virheestä, mutta tilalle tuli toinen.
Käyttämällä koodia:

<?php
//muodostetaan yhteys tietokantapalvelimeen
$yhteys = mysql_connect() or die("Yhdistäminen ei onnistunut!");

//valitaan tietokanta "testi"
mysql_select_db("testi", $yhteys) or die("Tietokantaa ei löytynyt!");

//tähän tulevat tietokantakyselyt!

//suljetaan yhteys
mysql_close($yhteys);
?>

tulee virheilmoitus:
"Warning: mysqli_select_db() expects parameter 1 to be mysqli, string given in C:\xampp\htdocs\..."

ja käyttämällä koodia:

<?php
//muodostetaan yhteys tietokantapalvelimeen
$yhteys = mysqli_connect("localhost", "käyttäjä", "salasana") or die("Yhdistäminen ei onnistunut!");

//valitaan tietokanta "testi"
mysqli_select_db("testi", $yhteys) or die("Tietokantaa ei löytynyt!");

//tähän tulevat tietokantakyselyt!

//suljetaan yhteys
mysqli_close($yhteys);
?>

tulee virheilmoitus: "Warning: mysqli_connect(): (HY000/1045): Access denied for user 'käyttäjä'@'localhost' (using password: YES) in C:\xampp\htdocs\..."
Saisinko niille kahdelle erilaiselle varoitukselle selityksen? Mitä pitää muuttaa, jotta varoituksista pääse eroon?

peran [24.03.2018 19:59:57]

#

Sulla pitää olla MySQL:ssä käyttäjä, ja sille salasana.

Tässä tapauksessa käyttäjä on "käyttäjä" ja kyseisen käyttäjän salasana on "salasana".

MySQL:llään pitää vielä luoda tietokanta nimeltä "testi", ja antaa käyttäjälle oikeudet käyttää kyseistä kantaa.

Helpoiten kyseiset oikeudet voi tehdä phpmyadmin:lla, jonka esitin jo aikaisemmin.

Metabolix [25.03.2018 10:32:03]

#

Alkuperäisessä virheessä ”Call to undefined function mysql_connect()” selvästi lukee, että funktiota mysql_connect ei ole olemassa. Tämä johtuu siitä, että kyseinen funktio ja koko vanha mysql-funktioiden sarja on poistettu PHP:stä. Vuoden 2003 ”Käytännön PHP-opas” onkin hyvästä syystä siirretty vanhentuneiden oppaiden arkistoon, joten älä lue sitä! Ajantasaisia oppaita löydät opassivulta.

MySQLi-funktiot ovat aivan eri kokonaisuus, joten et voi korjata vanhoja koodeja vain lisäilemällä i-kirjaimia funktioiden nimiin.

Lue uudempaa opasta ja käytä PDO:ta.

Yleensä tarvitset silti käyttäjätunnuksen ja salasanan tietokantayhteyttä varten, joten omalla palvelimella sinun pitää itse luoda tunnukset ja webhotellissa olet ehkä saanut valmiit tunnukset. Ohjasiko XAMPP ehkä jo asennusvaiheessa luomaan MySQL-tunnukset?

riksu [25.03.2018 11:55:17]

#

Kiitoksia neuvoista.

Asensin nyt koneelleni phpMyAdmin:n version phpMyAdmin-4.7.9-all-languages. Mutta miten pääsen alkuun? En tiedä, mistä voisin avata phpMyAdminin, että pääsen määrittelemään MySQL:n "käyttäjä" ja "salasana" omalle palvelimelle.

En huomannut, että XAMPP olisi ehdottanut asennusvaiheessa luomaan MySQL-tunnuksia tai mahdollisesti ohitin MySQL_tunnusten luomisen, koska oletin, että teen sen myöhemmin.

peran [25.03.2018 13:02:46]

#

Pitäisi löytyä seuraavasta osoitteesta, mikäli on normaalisti asennettu:
http://127.0.0.1/phpmyadmin/

Toki sijainti voi olla jokin muukin.

riksu [25.03.2018 13:32:14]

#

Onko niin, että kun käytän PDO:ta MySQL:n sijasta en tarvitse phpMyAdmin:a, koska phpMyAdmin on tarkoitettu ainoastaan MySQL:n hallintaan?

ajv [25.03.2018 13:59:42]

#

PDO ei ole tietokanta, vaan abstrakti luokka tietokantojen käyttöön (korvaa mysql_xxx()-funktiot). PDO:ta käytettäessä ei tarvitse sitoa koodia tiettyyn tietokantaan, vaan sama luokka toimii monille tietokannoille.

Tarvitset PDO:n kanssa edelleen esim. MySQL-tietokannan ja sen hallinoimiseen esim. phpMyAdminin.

riksu [25.03.2018 14:22:11]

#

Kiitoksia kaikille vastauksista. Isompi kuva koodauksesta alkaa selkiintymään.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta