Pereiti prie turinio

Rekomenduojami pranešimai

PHP darbo grupė prabalsavo dėl ext/mysql (visos mysql_* funkcijos) ir nusprendė kad jau laikas pradėti iškeldinimo darbus :)

 

Jungiantis prie MySQL su mysql_connect() bus generuojama E_DEPRECATED klaida - "The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead".

Nuoroda į pranešimą
Dalintis kituose puslapiuose

tai čia savaime suprantama niekas nenorės perbėgti į 5.5 ir viską keisti nuo pagrindų arba mokėt per naują programuotojams

 

E_DEPRECATED nėra fatal error, čia labiau kaip warning ir šias klaidas galima išjungti PHP konfiguracijoj arba pačiam skripte. Apie mysql_ panaikinimą ir perėjimą prie mysqli/pdo jau šnekama kelis metus. Jeigu programuotojas ima pinigus už savo darbą ir iki šios dienos vis dar naudoja mysql_ funkcijas, tai... :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

E_DEPRECATED nėra fatal error, čia labiau kaip warning ir šias klaidas galima išjungti PHP konfiguracijoj arba pačiam skripte. Apie mysql_ panaikinimą ir perėjimą prie mysqli/pdo jau šnekama kelis metus. Jeigu programuotojas ima pinigus už savo darbą ir iki šios dienos vis dar naudoja mysql_ funkcijas, tai... :)

aš nesakau, kad aš imu pinigus už programavimą ir naudoju mysql :D aš pats sau pasidaręs pora projektų su mysql ir dar tik dabar pereinu prie mysqli

Nuoroda į pranešimą
Dalintis kituose puslapiuose

aš nesakau, kad aš imu pinigus už programavimą ir naudoju mysql :D aš pats sau pasidaręs pora projektų su mysql ir dar tik dabar pereinu prie mysqli

 

Savo poreikiams gali pasidomėti mysqli. Juo galima naudotis ir objektiniu stilium:

$db = new mysqli($dbhost, $dbuser, $dbpass, $dbname);

 

Ir procedūriniu:

$db = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);

 

Dauguma mysqli funkcijų atkartoja mysql funkcijas tik su papildoma "i" raidele. Na bet čia teks pačiam pasidomėti, nes man labiau patinka PDO :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

bullshit!!! tai dabar jei svetainė sutvarkyta naudojant mysql tai teks viską redaguoti? čia kiek supratau net neveiks tokios fjos kaip fetch_array ir t.t?

Tikrai, kad bullshit! Kokie durniai tie PHP devai, įsivaizduoji, šalina seną API, kuri nepalaiko būtinų saugumui ir patogumui funkcijų, kai yra tik dvi naujos geresnės, tik dvi!

 

Sveikas,

 

jei nesunku gal gali pateikti pavyzdinę kodo eilutę kaip būtų su MySQLi bei su PDO (jungiantis prie DB)? :) mokausi programavimo pagrindų, tad kiekvienas kodo pavyzdys yra itin vertingas.

Alter neblogą įžangą parašė, bet netingėk pasiieškoti ir pats – labai praverčia mokytis nuosekliai.

 

http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers

http://php.net/manual/en/book.pdo.php

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nemanau, kad hosto tiekėjei diegs naujausią versiją t.y. 5.5 ,nes čia butų vos ne katastrofa arba bus galimybę rinktis versiją arba kol kas luktels.

Čia irgi tiesa, dar toli gražu ne visi turi net 5.4, kuri išleista kone prieš metus. HOSTEX, pvz., turi 5.3, o IV leidžia pasirinkti iš 4.4 (!!), 5.2, 5.3 ir 5.4.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

INSERT pavyzdys, UPDATE iš esmės veikia taip pat

// Parametrai siunčiami iš formos, maudojam mysql_real_escape_string() kad apsisaugoti nuo SQL injekcijos
$name = mysql_real_escape_string($_POST['name']);
$email = mysql_real_escape_string($_POST['email']);
// "Sulipdom" SQL komandą ir siunčiam į duomenų bazę
$result = mysql_query("INSERT INTO users SET name = '{$name}', email = '{$email}'");
// Gaunam kątik įrašytos eilutės ID
$user_id = mysql_insert_id();

// Analogiškas PDO pavyzdys, kabučių SQL komandoj nereikia
$stmt = $db->prepare('INSERT INTO users SET name = :name, email = :email');
// Parametrų reikšmės nustatomos atskirai
$stmt->bindParam(':name', $_POST['name'], PDO::PARAM_STR);
$stmt->bindParam(':email', $_POST['email'], PDO::PARAM_STR);
// Vykdoma užklausa
$stmt->execute();
// Gaunam eilutės ID
$user_id = $db->lastInsertId();

Redagavo alter
Nuoroda į pranešimą
Dalintis kituose puslapiuose

INSERT pavyzdys, UPDATE iš esmės veikia taip pat

// Parametrai siunčiami iš formos, maudojam mysql_real_escape_string() kad apsisaugoti nuo SQL injekcijos
$name = mysql_real_escape_string($_POST['name']);
$email = mysql_real_escape_string($_POST['email']);
// "Sulipdom" SQL komandą ir siunčiam į duomenų bazę
$result = mysql_query("INSERT INTO users SET name = '{$name}', email = '{$email}'");
// Gaunam kątik įrašytos eilutės ID
$user_id = mysql_insert_id();

// Analogiškas PDO pavyzdys, kabučių SQL komandoj nereikia
$stmt = $db->prepare('INSERT INTO users SET name = :name, email = :email');
// Parametrų reikšmės nustatomos atskirai
$stmt->bindParam(':name', $_POST['name'], PDO::PARAM_STR);
$stmt->bindParam(':email', $_POST['email'], PDO::PARAM_STR);
// Vykdoma užklausa
$stmt->execute();
// Gaunam eilutės ID
$user_id = $db->lastInsertId();

 

O tarkim jei vietoj bindParam naudoju $duom->execute(array(":message" => $message)); (execute) nėra skirtumo?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

O tarkim jei vietoj bindParam naudoju $duom->execute(array(":message" => $message)); (execute) nėra skirtumo?

 

bindParam() ir bindValue() yra šiek tiek lankstesni (pvz. galima nurodyti parametro tipą PDO::PARAM_STR, PDO::PARAM_INT), bet daugeliu atveju galima tiesiog naudoti $stmt->execute(array(":message" => $message)) (pagal nutylėjimą nustato PDO::PARAM_STR).

Nuoroda į pranešimą
Dalintis kituose puslapiuose

bindParam() ir bindValue() yra šiek tiek lankstesni (pvz. galima nurodyti parametro tipą PDO::PARAM_STR, PDO::PARAM_INT), bet daugeliu atveju galima tiesiog naudoti $stmt->execute(array(":message" => $message)) (pagal nutylėjimą nustato PDO::PARAM_STR).

Net pats suabejojęs išbandžiau – bent jau MySQL lyg ir pasiverčia į tinkamą tipą, jei bandai į INT laukelį kišti stringą? :)

mysql> CREATE TABLE a (id INT);
Query OK, 0 rows affected (0.09 sec)

mysql> INSERT INTO a VALUES ('1');
Query OK, 1 row affected (0.03 sec)

mysql> SELECT * FROM a;
+------+
| id   |
+------+
|    1 |
+------+
1 row in set (0.00 sec)

 

Ir su float tą patį padaro. Tai gal galima naudot saugiai ir be PARAM_INT? Ar, pvz., Postgres elgsis kitaip?

 

Bendriau, kam aš klausinėju – paėmiau ir pabandžiau. :) http://sqlfiddle.com/#!12/c0643/1/0

Redagavo Silke
Nuoroda į pranešimą
Dalintis kituose puslapiuose

na nežinau dėl ko reikia jau taip panikuoti, kiekviena turinio valdymo sistema turi mysql class kur aprašyta visa tai tai iš esmės reikės pakeisti tik viena failą. Ir kiek pats dariau sistemų tai stengdavausi visa tai sudėti į vieną failą. O tie kas to nedarė tai pajus skirtumą tarp OOP ir paprasto.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...