Permalänk
Medlem

porta mysql till mysqli

praktiskt talat varje gång jag frågar om hjälp med mysql så gnäller alla på mig att jag inte bör använda mysql och istället använda mysqli. är inte den bästa på webdesign överhuvudtaget så kan inte detta, och googladet hjälpte mig inte speciellt mycket.
därför tänkte jag fråga om det kanske finns någon sida eller något sånt som visar hur jag kan porta mysql koden över till mysqli? så jag kan göra mina körningar säkrare+slipper alla som klagar på det

Visa signatur

Min dator: Silent Base 600 | 1700X @ 3.9Ghz | MSI Gaming X 1080TI | RM750X | 512Gb M2 | 16Gb 3200mhz Ram | S34E790C @ 3440x1440
Tjejens dator: Define r4 | i5 3570k @ 4.2ghz | GTX Titan | 750w Supernova | 240gb SSD | 32gb ram
Citera/Tagga för svar!

Permalänk
Hedersmedlem

Prepared Statements in PHP and MySQLi [Matt Bango] länkade jag till på forumet för inte så länge sedan. Var i mina ögon en kort och rätt koncis genomgång. Det finns en del saker till att tänka på i förlängningen, men har man väl grunderna så är det lättare att googla vidare.

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Medlem

kollade in denna sida:http://www.pontikis.net/blog/how-to-use-php-improved-mysqli-e... men vart inte riktigt klokare hur jag uppdaterar detta. så postar två exempel. en är en input, den andra är en output.

$query = "INSERT INTO kommentar (movie_id, comment, author, author_email, post_date, ip) VALUES ('$movie_id','$comment','$author','$email',CURRENT_TIMESTAMP, '$ip')"; $result = mysql_query($query, $connection) or die (mysql_error()); mysql_close($connection);

och

$query = "SELECT * FROM movie_db ORDER BY ID DESC LIMIT 5"; $result = mysql_query($query, $connection) or die (mysql_error()); while ($row = mysql_fetch_array($result)) { $id = $row['id']; $title = $row['title']; $genre_1 = $row['genre_1']; $genre_2 = $row['genre_2']; $genre_3 = $row['genre_3']; $length = $row['length']; $official_url = $row['official_url']; $imdb_url = $row['imdb_url']; $trailer_url = $row['trailer_url']; $language = $row['language']; $rel_date = $row['rel_date']; $director = $row['director']; $actors = $row['actors']; $rating = $row['rating']; $meta_rating = $row['meta_rating']; $img_src = $row['img_src']; $text = $row['text']; $creation_date = $row['creation_date']; $creator = $row['creator']; //--- ta fram total antal kommentarer för given film ---// $result_comments = mysql_query("select count(id) FROM comments WHERE movie_id = " . $id .""); $row = mysql_fetch_array($result_comments); $total_comments = $row[0];

och hur använder jag "real_escape_string" som bäst, där den inkluderar påläggning av quotes eftersom den inte gör det?

med dessa borde jag kunna fixa till min kod ganska bra själv

Visa signatur

Min dator: Silent Base 600 | 1700X @ 3.9Ghz | MSI Gaming X 1080TI | RM750X | 512Gb M2 | 16Gb 3200mhz Ram | S34E790C @ 3440x1440
Tjejens dator: Define r4 | i5 3570k @ 4.2ghz | GTX Titan | 750w Supernova | 240gb SSD | 32gb ram
Citera/Tagga för svar!

Permalänk
Hedersmedlem
Skrivet av Christley:

och hur använder jag "real_escape_string" som bäst, där den inkluderar påläggning av quotes eftersom den inte gör det?

Använd inte någon sådan funktion, utan använd "prepared statements" i stället som sköter detta automatiskt. Det står om detta i både din (se avsnittet "Prepared statements" och neråt) och min länk.

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Medlem

Jag skulle nog rekommendera PDO istället för MySQLi. Finns dessutom en utmärkt guide på svenska.

Det är bättre (mer databasstöd, lättare att binda parametrar osv) på alla sätt och vis jämfört med MySQLi (förutom i benchmarks, men det är nog irrelevant för dig).

Visa signatur

CPU: Intel i5 2500K @ 4,7GHz Mobo: Asus P8Z68-V
GPU: Asus STRIX 970 RAM: 8GB Corsair Vengence 1600 MHz CL9
PSU: OCZ ModXStream 700W Chassi: NZXT Phantom

Citera så att jag hittar tillbaka!

Permalänk
Hedersmedlem
Skrivet av csoLs:

Jag skulle nog rekommendera PDO istället för MySQLi. Finns dessutom en utmärkt guide på svenska.

Det är bättre (mer databasstöd, lättare att binda parametrar osv) på alla sätt och vis jämfört med MySQLi (förutom i benchmarks, men det är nog irrelevant för dig).

Det finns för- och nackdelar. Just den jämförelsesidan länkas ofta, men den är i mina ögon rätt bristfällig. PDO "vinner" för att den stöder fler databaser — men det svarar ju inte på frågan: "om jag ska använda MySQL, vilket gränssnitt bör jag använda?".

Det är en försköning att säga som de gör på sidan att det bara är att använda en annan databas som drop-in-replacement "med lite ändringar i frågor" om man använder PDO, för fortfarande så finns det egenheter hos de enskilda databaserna; exponentiellt fler ju mer invecklade frågor man använder, och lagrade procedurer ovanpå det.

Dessutom gör sidan en poäng av att `mysqli` inte stöder "client side prepared statements" — men enda anledningen till att PDO stöder det är för att emulera prepared statements för databaser som inte har stöd för detta. Eftersom `mysqli` per definition jobbar mot en databas som stöder detta så är det märkligt att ens ha med i en direkt jämförelse. Samtidigt säger personen att `mysqli` prestandamässigt är bättre, men förkastar detta som argument för allas användningsområden, vilket är rätt trubbigt.

Positivt med PDO är att man lär sig ett tillvägagångssätt ifall man ska använda andra databaser i andra projekt i framtiden. Användningsområdet i att migrera en sida till en helt annan databas måste vara mikroskopiskt litet i de fall då det bara är att "ändra en parameter". Jobbar man med ett projekt som man ändå vet kommer använda MySQL/MariaDB så känns det inte helt självklart att skänka bort 5% i databasprestanda kontinuerligt under sidans livstid bara för att eventuellt underlätta en eventuell (fast väldigt osannolik) total databasmigrering i framtiden.

Jag har verkligen inget emot PDO i sig, men just den sidan tycker jag gör ett dåligt jobb för att representera situationen, och verkar söka frågan till ett svar den redan vet att den vill förmedla. Det finns en poäng i att PDO:s namngivna parametrar är tydligare, om man inte på förhand vet hur många variabler man vill binda så är `mysqli` onödigt bökigt, PDO:s fetchObject kan vara behändig och till sitt nästa projekt mot en annan databas kanske man har ett försprång. Samtidigt så finns det saker som är krångligare med MySQL via PDO än direkt med `mysqli` (exempelvis att räkna rader (jag tror dock att detta fixats för just MySQL i nyare versioner av PDO, men `rowCount()` ger olika resultat beroende på vilken backend PDO använder för tillfället)) och PDO stöder inte asynkrona (icke-blockerande) anrop. Det är för den delen inget som skadar i att lära sig båda gränssnitten, och de är rätt snarlika i många koncept.

En sak som möjligen är ett argument för de som är nya till gränssnitten är att jag föreställer mig att det finns mer information att hitta på nätet om `mysqli`, speciellt när det handlar om MySQL-specifika beteenden. Man vet också att de frågor man hittar handlar om just MySQL och inget annat.

Det är fritt att välja vilket gränssnitt man vill; jag reagerar mest emot den onyanserade bild den där jämförelsesidan målar upp. Jag noterade detta senast för någon vecka sedan när den länkades, så nu passade jag på att skriva upp det jag tänkte då .

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.