Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP 7 ja MySQL kyselyt?

Sivun loppuun

Kesän poika [15.01.2019 11:21:36]

#

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);

Teuro [15.01.2019 12:22:25]

#

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.

Kesän poika [15.01.2019 12:42:10]

#

Kantayhteyttä ei muodostu ollenkaan, tulee virheilmoitus:

PHP Fatal error: Uncaught Error: Call to undefined function mysql_connect() ...

Lebe80 [15.01.2019 12:44:54]

#

Oletko tsekannut googlesta vinkkejä?

Tällä mysqli ja PDO -versiot mysql:n tilalle:
http://webdevzoom.com/connect-mysql-database-using-php/

Teuro [15.01.2019 12:46:52]

#

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.

Metabolix [15.01.2019 13:41:57]

#

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.

Kesän poika [17.01.2019 14:24:29]

#

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));

Metabolix [17.01.2019 14:34:33]

#

Millä tavalla tallennus ”ei toimi”? Tuleeko jokin virheilmoitus? Muista yhteyden luonnin jälkeen laittaa virheilmoitukset tulemaan poikkeuksina, niin luultavasti näet ne paremmin:

$yhteys->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

Ei AUTO_INCREMENT-kenttää tarvitse mitenkään erikseen huomioida.

Käytä myös viesteissäsi kooditageja (valikko viestilaatikon yllä), niin koodit erottuvat paremmin.

Kesän poika [17.01.2019 14:46:16]

#

PHP:n error login virheilmotus:
PHP Fatal error: Uncaught Error: Call to a member function prepare() on null in

Lebe80 [17.01.2019 15:12:11]

#

Sun $yhteys -muuttujaa ei ole asetettu.

Se ei siis sisällä nyt mitään (varmaankin pitäisi sisältää jonkinlaisen tietokantayhteyden luovan olion).

Kesän poika [17.01.2019 15:23:05]

#

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


Sivun alkuun

Vastaus

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

Tietoa sivustosta