Hei, serverille päivittettiin PHP7 ohjelma, jolloin MySQL tietokantayhteys lakkasi toimista.
Minulla ei ole kokemusta em. tietokantaohjelmasta, joten saisinko täältä apua, eli miten tuota vanhaa tulis muokata, että toimisi PHP7:ssa?
Käytössä oleva kantayhteys ja kysely on seuraavanlainen:
$db_connection = mysql_connect ($DBHost, $DBUser, $DBPass) OR die (mysql_error()); $db_select = mysql_select_db ($DBName) or die (mysql_error()); $db_tapahtumat = "calendar_events"; $query = "SELECT * FROM $db_tapahtumat where event_id=$event_id"; $query_result = mysql_query ($query); $info = mysql_fetch_array($query_result);
Millainen virhe tulee, kun teet (mahdollisesti) vaarallisia kantakyselyiytä? Laita
$query_result = mysql_query ($query);
jälkeen
echo mysql_error();
Tästä pääset varmasti korjaamaan virheitä. Sitten voitkin pohtia pitäisikö siirtyä suoraan PDO-rajapinnan kanssa työhön. Lopuksi tietokannan rakenne vaikuttaa oudolta, koska aikaleimat kannattaisi pitää yhdessä solussa ei ripotellen moneen osaan.
Kantayhteyttä ei muodostu ollenkaan, tulee virheilmoitus:
PHP Fatal error: Uncaught Error: Call to undefined function mysql_connect() ...
Oletko tsekannut googlesta vinkkejä?
Tällä mysqli ja PDO -versiot mysql:n tilalle:
http://webdevzoom.com/connect-mysql-database-using-php/
No eipä tuosta paljon selvemmäksi enää ilmoitus tule. Käytät tuntematonta funktiota mysql_connect() rivillä 3. Muuta koodisi vastaamaan vaatimuksia. Mallia ja oppia saat valmiista oppaasta.
Nykyään tietokantayhteyteen pitää käyttää PDO- tai MySQLi-rajapintaa, joista PDO on yksinkertaisempi. Vanhat mysql_-alkuiset funktiot on poistettu PHP 7:sta niiden lukuisten ongelmien vuoksi.
PHP 7.0 julkaistiin 3 vuotta sitten, joten muutoksen ei pitäisi tulla yllätyksenä, jos on mitään kiinnostusta PHP:hen ja sivujen ylläpitoon. Onkin korkea aika päivittää, sillä PHP 5.6:n kaikki tuki on jo loppunut ja myös PHP 7.0:n tuki on loppunut. Juuri tällä hetkellä PHP 7.2 lienee paras ratkaisu, koska tuoreessa PHP 7.3:ssa on joitakin uusia korjaamattomia bugeja. Toisaalta luultavasti PHP 7.3.2 alkaa jo olla turvallisesti käyttökelpoinen.
Kiitos hyvistä vastauksista. Olen aloittelija ohjelmoinnissa ja ns. itseopiskellut, joten ohjemointitaidot ovat hyvin vähäiset. Olen nyt tehnyt muutoksia PDO-rajapinnan mukaan ja kannasta kyselyt toimii hyvin, mutta ongelmitta en ole selvinnyt. Minulla on tietokannassa taulu demo, jossa on auto_ingrement kenttä, niin miten se huomioidaan tallennuksessa? Auto_ingrement kenttää ei ole huomioitu ao. esimerkissä ollenkaan. Miksi ei tallennus toimi?
$kysely = $yhteys->prepare("INSERT INTO demo (nimi , osoite , p_numero , p_paikka , puhelin , info, nro, sms) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?)"); $kysely->execute(array($is_nimi, $is_osoite,$p_numero,$p_paikka,$puhelin,$info,$nro,$sms));
Millä tavalla tallennus ”ei toimi”? Tuleeko jokin virheilmoitus? Muista yhteyden luonnin jälkeen laittaa virheilmoitukset tulemaan poikkeuksina, niin luultavasti näet ne paremmin:
Ei AUTO_INCREMENT-kenttää tarvitse mitenkään erikseen huomioida.
Käytä myös viesteissäsi kooditageja (valikko viestilaatikon yllä), niin koodit erottuvat paremmin.
PHP:n error login virheilmotus:
PHP Fatal error: Uncaught Error: Call to a member function prepare() on null in
Sun $yhteys -muuttujaa ei ole asetettu.
Se ei siis sisällä nyt mitään (varmaankin pitäisi sisältää jonkinlaisen tietokantayhteyden luovan olion).
Mitä tarkoitat "$yhteys -muuttujaa ei ole asetettu"?
Kantayhteys:
try { $db_connection = new PDO("mysql:host=$DBHost;dbname=$DBName", "$DBUser", "$DBPass"); } catch (PDOException $e) { die("VIRHE: " . $e->getMessage()); } // virheenkäsittely $db_connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $db_connection->exec("SET NAMES utf8");
Lisäys:
Kiitos Lebe80.
Kysely $yhteys- muuttuja oli väärä, piti olla $db_connection
Aihe on jo aika vanha, joten et voi enää vastata siihen.