Hur fungerar egentligen MySQLi och prepared statements i PHP?

Skrivet av Hur fungerar?     onsdag, 9 april 2014, 09:49

Ingen som är intresserad av PHP har väl kunnat undgå att PHP:s mysql-funktioner har varit deprecated sedan PHP 5.5.0, och att det börjar bli dags att använda något av de andra MySQL-API:er som tillhandahålls. Ett bra alternativ är att börja använda den objektorienterade varianten av MySQLi, där i:et står för improved, och givetvis med prepared statements. Prepared statements är för övrigt någonting som verkligen rekommenderas att alla använder! Men, här kommer i alla fall en kort liten guide till objektorienterad MySQLi med prepared statements i PHP (i sin simplaste form)! Jag förutsätter förresten att du som läser det här har hyfsad koll på PHP och MySQL sedan tidigare.

Att ansluta till MySQL

Att ansluta till MySQL är lika enkelt som det alltid har varit, man skapar helt enkelt bara ett mysqli-objekt med hjälp av vilket man sedan kör sina SQL-frågor.


// Ansluter till MySQL
$sqlHost = 'localhost';
$sqlUsername = 'sqlUsername';
$sqlPassword = 'xxxxxxxxxx';
$sqlDatabase = 'sqlDatabase';
$mysqli = new mysqli($sqlHost, $sqlUsername, $sqlPassword, $sqlDatabase);

Att ställa en fråga till MySQL

När det gäller köra SQL-frågor så blir det några fler rader kod än med den gamla mysql_query()-funktionen, åtminstone om man använder prepared statements. Men vi börjar med ett väldigt simpelt exempel utan några parametrar.


// Hämta användarnamnet för användaren med ID = 1
$stmt = $mysqli->prepare("SELECT userName FROM siteUsers WHERE id = 1"); // Öppnar och förbereder SQL-frågan
$stmt->execute(); // Kör frågan
$stmt->bind_result($userName); // Binder resultatet till en variabel
$stmt->fetch(); // Hämtar resultatet
$stmt->close(); // Stänger frågan
echo $userName; // Innehåller det eftersöka användarnamnet

Frågan ovan med ett prepared statement

Låt säga att vi inte vet vilket vilket ID som skall användas i frågan ovanför, utan att det värdet hämtas från t.ex. data inmatad från en användare, eller från någon annan variabel. Då är det klokt att binda variabeln till en viss datatyp, och genom att göra detta tala om för MySQL att innehållet i den inmatade variabeln bara får vara av just den datatypen - bundna parametrar behöver inte escapeas, det sköter bind_param()!

Möjliga datatyper är:

  • i => integer
  • d => double
  • s => string
  • b => blob


// Hämtar användarnamnet för användare med ID = ?
$stmt = $mysqli->prepare("SELECT userName FROM siteUsers WHERE id = ?"); // Öppnar och förbereder SQL-frågan
$stmt->bind_param("i", $userID); // Bestämmer att $userID skall vara en integer
$stmt->execute(); // Kör frågan
$stmt->bind_result($userName); // Binder resultatet till en variabel
$stmt->fetch(); // Hämtar resultatet
$stmt->close(); // Stänger frågan
echo $userName; // Innehåller resultatet från den sökta kolumnen

Loopa igenom ett result set

Om man kollar på hur man loopar igenom ett result set med de gamla mysql-funktionerna, så var det åtminstone för mig vanligast att skapa en associativ array av varje rad, t.ex. genom while ($row = mysql_fetch_array($res)). Det går att göra med MySQLi också, men vi bygger vidare på de bundna variablerna - och eftersom det är ett result set vi får returnerat, måste vi lagra/buffra resultatet med hjälp av store_result().


// Hämtar användarnamn för användare med användarnivå över eller lika med ?
$stmt = $mysqli->prepare("SELECT userName FROM siteUsers WHERE userLevel >= ?"); // Öppnar och förbereder SQL-frågan
$stmt->bind_param("i", $userLevel); // Bestämmer att $userLevel skall vara en integer
$stmt->execute(); // Kör frågan
$stmt->bind_result($userName); // Binder resultatet till en variabel
$stmt->store_result(); // Buffrar resultatet från frågan
// Loopar igenom individuella resultat
while ($stmt->fetch()) {
   echo $userName; // Innehåller resultatet från varje rad
}
$stmt->close(); // Stänger frågan

Exempel med flera variabler

Vi bygger på föregående SQL-fråga med några fler variabler och ser hur det kan se ut med mixade datatyper (och tabeller). Notera att datatyperna och variablerna i bind_param() måste följa samma ordning som de bundna parametrarna i SQL-frågan.


// Hämtar användarnamn och inloggningstid för användare med användarnivå över eller lika med ? 
// och som har varit inloggade senast igår
$stmt = $mysqli->prepare("SELECT u.userName, l.lastLogin 
                            FROM siteUsers u, userLogins l 
                           WHERE u.userLevel >= ? 
                             AND u.id = l.userID 
                             AND l.lastLogin > ?"); // Öppnar och förbereder SQL-frågan
$stmt->bind_param("is", $userLevel, $yesterday); // $userLevel = integer, $yesterday = string
$stmt->execute(); // Kör frågan
$stmt->bind_result($userName, $lastLogin); // Binder resultaten till variabler
$stmt->store_result(); // Buffrar resultatet från frågan
// Loopar igenom individuella resultat
while ($stmt->fetch()) {
   echo $userName.': '.$lastLogin.'<br />'; // Innehåller resultatet från varje rad
}
$stmt->close(); // Stänger frågan

Andra nyttiga saker att ha koll på

Exemplen ovan illustrerar ett väldigt enkelt enkelt sätt att använda prepared statements med MySQLi, men sedan finns det ju också fler saker som kan vara bra att ha lite koll på vad gäller MySQLi rent generellt, t.ex. num_rows för att ta reda på hur många rader en fråga resulterar i, eller insert_id för att hämta det ID som den senaste INSERT-queryn genererade. Och så klart finns det mycket mer att använda sig av, men det här borde räcka för att komma igång. Läs gärna vidare här!


// Exempel på num_rows
$stmt = $mysqli->prepare("SELECT id, postName FROM blogPosts");
$stmt->execute();
$stmt->bind_result($postID, $postName);
$stmt->store_result();
// Kollar om det finns några blogginlägg
if ($stmt->num_rows) {
   echo $stmt->num_rows.' blogginlägg hittades:<br />';
   while ($stmt->fetch()) {
      echo $postID.': '.$postName.'<br />';
   }
} else {
   echo 'Tyvärr hittades inga blogginlägg. :-/';
}
$stmt->close();

// Exempel på insert_id
$stmt = $mysqli->prepare("INSERT INTO siteUsers SET userName = ?");
$stmt->bind_param("s", $userName);
$stmt->execute();
$userID = $stmt->insert_id; // Sparar den nya användarens ID
$stmt->close();
echo $userID; // Skriver ut den nya användarens ID

Hur fungerar egentligen en högtalare?

Skrivet av Hur fungerar?     torsdag, 20 februari 2014, 18:33

Eftersom det finns oerhört många olika sorters högtalare är det omöjligt att förklara hur varenda sorts högtalare fungerar, åtminstone i den här korta artikeln. Men det som alla högtalare har gemensamt är att de sätter luft i rörelse, en rörelse som i sin tur skapar ljudvågor som därefter tas upp av våra öron.

Men hur sätts luften i rörelse?

Jo, det är det här som är det finurliga med högtalare, åtminstone den vanliga typen av högtalare som antagligen står bredvid din förstärkare eller stereo just nu. Genom att antal olika steg börjar ljudet sin resa i form av elektrisk energi som tillförs högtalaren, för att slutligen tas upp som ljudvågor av våra öron.

I det första steget tillförs elenergi till högtalaren, denna elenergi inducerar därefter en spole genom elektromagnetisk kraftverkan så att den rör sig upp och ner. Rörelsen hos denna spole förmår sedan ett tunnt och fjäderupphängt membran att vibrera. Och det är detta membran som därefter sätter luften i rörelse och skapar de ljudvågor vi hör.

Vilken typ av ljud vi sedan hör beror till stor del på hur membranet är uppbyggt. Till man t.ex. ha ett ordentligt och tung basljud använder man ett stort och konformat membran, vill man istället ha en fint kvittrande diskant använder man istället ett litet kupolformat membran.


Hur fungerar egentligen potentialvandring (inom elläran)?

Skrivet av Hur fungerar?     lördag, 15 februari 2014, 18:03

Potentialvandring används för att bestämma den elektriska potentialen (V, i enheten V [Volt]) i en godtyckligt vald punkt i en krets, och den potential som mäts upp är detsamma som spänningen mellan jord och den valda punkten. Spänning definieras därför som potentialskillnaden mellan två godtyckligt valda punkter. Ett ställe i en elektrisk krets som är jordad har potentialen noll, vilket är anledningen till varför man oftast börjar sin potentialvandring där.

När man utför en potentialvandring brukar man oftast stöta på två frågetecken, eller saker man måste ta med i beräkningarna i sin potentialvandring. Saker som bestämmer vad den slutgiltiga potentialen kommer att bli. Beteckningarna som används i redogörelsen nedan:
• Spänningen U i en spänningskälla, som mäts i V [Volt].
• Resistansen R i en resistor, som mäts i Ω [Ohm].
• Strömmen I i en spänningskälla, som mäts i A [Ampere].

Potentialvandring genom en resistor

• Om man utför potentialvandringen i strömmens riktning genom en resistor, så sjunker potentialen med R x I
• Om man utför potentialvandringen mot strömmens riktning genom en resistor, så stiger potentialen med R x I

Potentialvandring genom en spänningskälla (utan inre resistans)

• Om man utför potentialvandringen från pluspol till minuspol, så stiger potentialen med U
• Om man utför potentialvandringen från minuspol till pluspol, så sjunker potentialen med U

Vid potentialvandring genom en spänningskälla med inre resistans, gäller ovanstående "regler" kombinerat

En vanlig benämning när man pratar om potentialvandring är Kirchoffs andra lag, som säger att summan av alla potentialändringar i en sluten krets är noll. Innebörden av detta är att om man börjar sin potentialvandring i t.ex. punkten P, där man känner till potentialen, så kommer man efter att ha potentialvandrat genom hela kretsen tillbaka till punkt P erhålla att summan av alla potentialändringar är lika med noll.


Hur fungerar egentligen en Dreambox?

Skrivet av Hur fungerar?     onsdag, 12 februari 2014, 18:35

En Dreambox är en digital-tv-box som använder fri mjukvara, generellt sett med ett operativsystem av typen Linux. Det som är bra med en Dreambox är att den kan hantera kort från flera leverantörer, t.ex. Canal Digital och Viasat, vilket innebär att man bara behöver en box istället för flera. Likaså kan en sådan lösning möjliggöra för en mycket enklare delning av TV-kanaler mellan flera TV-apparater i andra rum.

Läs mer hos Dreambox.


Hur fungerar egentligen en värmepump?

Skrivet av Hur fungerar?     måndag, 10 februari 2014, 16:56

En värmepump är en anordning för att förflytta värme från en punkt till en annan, eller från en kall till en varm plats. Det finns många olika sorters ändamål då man använder värmepumpar, eller egentligen källor från varifrån man hämtar sin önskade värme - men oavsett lösning eller källa måste energi tillföras för att kunna transportera värmen.

För att avgöra hur bra eller ekonomiskt försvarbar en värmepumplösning, är talar man ofta om värmepumpens värmefaktor. I enkla ord innebär detta en jämförelsesiffra som talar om hur mycket värme man får tillbaka per tillförd mängd el av den aktuella värmepumplösningen. Värmefaktorn anges i termen COP, t.ex. en värmepump med COP 4 ger fyra delar värme per del tillförd elenergi, eller i andra ord 4 kWh värme per 1 kWh tillförd elenergi.

Frånluftsvärmepump

En frånluftsvärmepump kopplas till ett hus ventileringssystem och hämtar värme från dess frånluft. Frånluftsvärmepumpen brukar generellt sett vara den relativt enklaste lösningen, och den kan användas för både uppvärming av huset samt varmvattenberedning. Dock är frånluftsvärmepumpen inte alltid optimal, då den i ett hus som har hög energiförbrukning inte kommer upp i samma värmefaktor som andra värmepumpar.

Luft-luftvärmepump

En luft-luftvärmepump bör ses som ett komplement snarare än en komplett lösning för uppvärmning. Luft-luftvärmepumpen hämtar värme från uteluften, och levererar sedan denna varmluft direkt ut i huset, den kan därför ge en skiftande innetemperatur om utetemperaturen fluktuerar mycket. En luft-luftvärmepump kan inte heller användas för att bereda varmvatten. En fördel dock med luft-luftvärmepumpen är att en del av de fabrikat är så kallade reversibla, vilket innebär att de under sommarhalvåret kan fungera som en luftkonditionering snarare än ett uppvärmningssystem!

Luft-vattenvärmepump

Funktionen hos en luft-vattenvärmepump är ganska lik luft-luftvärmepumpen, med skillnaden att luft-vattenvärmpumpen är kopplad till husets vattensystem. En luft-vattenvärmepump kan därför både värma upp huset samt vattnet. Men precis som luft-luftvärmepumpen beror dess värmefaktor på utetemperatur, och med en fluktuerande utetemperatur blir även uppvärmingen av husets vattensystem lidande.

Bergvärmepump

En bergvärmepump hämtar värmen från det vatten som finns i berggrunden under huset, vilket innebär att en bergvärmepumpslösning inte är möjlig för alla husägare. För att kunna dra nytta av en bergvärmepump måste man alltså borra sig ner till berggrunden (ca. 1-2.5 meter), om någon sådan finns. Bergvärmepumpar är ofta väldigt effektiva och ger en bra och jämn värmefaktor året om, dock behöver man tillstånd från kommunen för att borra och installera en bergvärmepump.

Jordvärmepump

En jordvärmepump hämtar likt bergvärmepumpen värme från marken, faktiskt används samma typ av värmepump. Skillnaden är dock att jordvärmepumpen drar nytta av en lång slang som grävs ned på ca. 1-1.5 meters djup. Slangen behöver även ligga över en ansenlig yta, ca. 400-600 m², varför det kräver att en sådan yta finns att tillgå. Jordvärmepumpen ger likt bergvärmepumpen en bra och jämn värmefaktor året om, och passar bra till hus med hög energiförbrukning. Men tillstånd behövs även för att installera en jordvärmepump.


Hur fungerar egentligen färger?

Skrivet av Hur fungerar?     torsdag, 21 november 2013, 09:15

Varför har ytor olika färger?

Hur vi uppfattar olika föremål och ytors färger beror faktiskt på egenskaper hos det material som bygger upp föremålet eller ytan, eller närmare bestämt materialets förmåga att absorbera ljus. Med att absorbera menas att "ta upp", t.ex. om en torr disktrasa läggs över utspillt vatten, då absorberas vattnet av disktrasan. På liknande sätt absorberas vissa färger av vissa material, t.ex. en röd kaffekopp har färgen röd just därför att alla färger utom den röda färgen absorberas av föremålet, medan den röda reflekteras och "tas upp" av ögat. Jämfört med till exempel snö, som reflekterar allt ljus och därför uppfattas som vit.

Varma svarta kläder och svala vita kläder

Fenomenet att mörka kläder blir varma, medan ljusa kläder håller sig svalare, har även sin förklaring i just materials/ytors förmåga att absorbera ljus. Detta på grund av att ljus som absorberas omvandlas till värmeenergi. I t.ex. en svart tröja, där (nästan) allt ljus absorberas, omvandlas mer ljus till värme än jämfört med t.ex. en vit tröja, där (nästan) allt ljus reflekteras istället för att absorberas!

Varför är himlen blå?

När man pratar om färger och varför saker och ting har en viss färg, leds man ofta till funderingen; varför är himlen blå? Ljuset från solen består ju av alla färger, vilket borde innebära att himlen skulle vara vit, men den är ju blå, varför då? Det hela har faktiskt en relativt enkel förklaring, beroende på hur djupt man vill gräva i frågan, och den förklaringen är att det faktiskt är luften vi ser. Detta beror på att när solljuset kommer in i vår atmosfär och krockar med luftens molekyler, då är det ljuset med blå färg som sprids mest och alltså slutligen når våra ögon!


Hur fungerar egentligen hinduisk kosmologi?

Skrivet av Hur fungerar?     fredag, 1 mars 2013, 16:56

Enligt hinduisk kosmologi existerar universum på ett cykliskt sätt i symbios med guden Brahmas liv. Brahma har en livstid om ungefär 100 Brahma-år, ett Brahma-år varar ca. 3 110 miljarder år (vanliga). När Brahmas liv tar slut går även universum under, för att sedan börja om från början i och med att Brahma övergår till en ny inkarnation. Man räknar med att hälften av Brahmas liv, ungefär 15 520 miljarder år, har gått sedan nuvarande universums början. Under Brahmas långa liv inträffar även en mängd andra cykler. Vid slutet av varje Brahma-dag, ungefär 4,32 miljarder år, förtärs materian i universum av en väldig eld. Därefter vilar Brahma en natt av samma längd, under vilken universum ligger öde, för att sedan återuppstå när Brahma vaknar.

En Brahma-dag kallas för en kalpa. En kalpa består i sin tur av 14 manvantara-generationer. Varje manvantara-generation består av 71 divya-yugas (chaturyugas), och varje divya-yuga delas slutligen in i fyra yugas:
Sat yuga: 1 728 000 år
Treta yuga: 1 296 000 år
Dwapara yuga: 864 000 år
Kali yuga: 432 000 år

Enligt utförda beräkningar har man kommit fram till att vi befinner oss ca. 5 100 år (+-20 år) in i en kali yuga-period.


Klicka för större bild

Ganska fantasifullt, eller hur? :-)


Hur fungerar egentligen det talande språket?

Skrivet av Hur fungerar?     lördag, 16 februari 2013, 16:36

Talandets historia

Det talande språkets ursprung är någonting som hittills inte har kunnat gått att fastställa med exakthet. Det vi kan anta är att människans förmåga att hantera språk har utvecklats någon gång under den senare delen av vår pågående evolution, som minst för ca. 150 000 - 400 000 år sedan, då homo sapiens skiljde sig från homo neanderthalensis. Men man har även funnit indikationer på att homo neanderthalensis hade viss talförmåga, vilket kan betyda att även homo rhodesiensis kunde tala. Homo rhodesiensis delades upp i homo neanderthalensis/-sapiens för ca. 200 000 - 600 000 år sedan.

Språk idag och dess evolution

I världen idag antar man att antalet språk i bruk varierar mellan 3 000 till 8 000, beroende på hur man räknar. Det som gör det svårt att räkna är att det inte går att bestämma hur man ska dra gränsen mellan vad som är ett språk och vad som är en dialekt. Vad gäller språkets utveckling kan det jämföras med evolutionen. Många språk behärskas enbart av ett fåtal människor. Och när då andra större och mer inflytelserika språk blir ett måste för att överleva vardagen, dör många av de mindre språken ut. Man brukar räkna med att varannan vecka dör ett ursprungsfolks språk ut.

Sett till antalet personer med ett visst språk som modersmål är dessa tre världens största språk:
- Mandarin, 935 miljoner människor
- Spanska, 387 miljoner människor
- Engelska, 365 miljoner människor
(uppskattade siffror)


Hur fungerar egentligen talapparaten?

Skrivet av Hur fungerar?     tisdag, 12 februari 2013, 13:49

Ett avgörande faktum som förutsätter att en art, såsom människan, ska kunna använda språk är talapparaten, men det finns även andra minst lika vitala delar som måste kunna samspela med talapparaten för att tal ska kunna uppstå.

Talapparaten delas vanligen in i tre delar - andningssystemet, fonationssystemet och artikulationssystemet.
Andningssystemet
Andningssystemet består av bl.a. lungorna och luftstrupen, och är den delen av talapparaten som producerar det flöde av luft som är nödvändigt för att kunna framkalla ljud.
Fonationssystemet
Fonationssystemet består av struphuvudet och stämbanden, varav stämbanden är de två horisontella slemhinnor som sträcker sig horisontellt över struphuvudet. Genom vibration har stämbanden förmågan att ändra flödet av den luft som andningssystemet pressar ut.
Artikulationssystemet
Artikulationssystemet består av svalget, munhålan, näshålan och tungan. Det är artikulationssystemet som gör att vi kan uttala konsonanter och vokaler.

Till skillnad från automatiskt producerade ljud, såsom t.ex. skratt, behövs också en medveten kontroll över de organ som gör det möjligt att forma ljuden. Samt för att kunna prata i form av långa meningar behövs även förmågan att kunna styra luftflödet från lungorna. Sen det sista, och kanske mest omtvistade faktumet, är att individen måste ha en hjärna som klarar av att hantera fenomenet språk. Det som är omtvistat är på vilket sätt hjärnan klarar av just det, huruvida vi har ett medfött "språkorgan", om det är vår allmänna intelligens eller om vi har en speciell "språkgen" förbryllar forskarna. Dock har man i den vänstra hjärnhalvan kunnat kartlägga vissa, för språket, elementära delar.


Hur fungerar egentligen stumhet och mutism?

Skrivet av Hur fungerar?     fredag, 8 februari 2013, 14:58

Med stumhet menas oförmågan att tala, det är en ovanlig men dock förekommande åkomma. Det finns flertalet olika former, men de som förknippas med termen mutism är de vanligaste. Varför man skiljer på stumhet och mutism beror på att de former som hör till mutism i de flesta fall anses ha kopplingar till psykiska sjukdomar.

Stumhet

Stumhet kan bero på flera saker, men generellt sett menar man att de vanligast förekommande orsakerna är:
Medfödd dövhet
Personer som födds döva startar livet med inte bara dövheten som handikapp, de går även helt miste om att veta eller lära sig hur talspråk låter. Detta i sin tur kan leda till att de aldrig själva lär sig att använda talspråk.
Infantil autism
Infantil autism är ett kroniskt handikapptillstånd som generellt sett visar sig under de första åren av en persons uppväxt. Ett utav handikappets kännetecken är just nedsatt språkförståelse, och i vissa fall tenderar förmågan att lära sig talspråk att försvinna helt.
Medfödd hjärnskada
En medfödd hjärnskada som påverkar de för språket aktiva delarna i hjärnan kan göra så att en person som tekniskt sett kan använda talet (talapparaten fungerar), inte har den korrekta mjukvaran för att processera och styra de ljud som talapparaten har förmågan att föra fram.

Mutism

Termen mutism delas i sin tur också vanligen upp i tre olika delar:
Selektiv mutism
Selektiv mutism kallas den form av mutism som främst uppstår hos barn, där barnet i vanliga fall har en god förmåga att kunna prata. Det som i de flesta fall anses vara orsaken är olika ångestsyndrom, som t.ex. social fobi. Detta kan också förklara varför barn med selektiv mutism som inte kan prata i sociala sammanhang har ett fullt fungerande talspråk i t.ex. trygga familjesammanhang.
Kataton mutism
Kataton mutism kan förekomma vid allvarliga störningar i muskelapparaten, som i sin tur påverkar människans rörelsemönster, orsak till dessa störningar kan vara bl.a. schizofreni, påverkan av narkotika och hjärninflammation.
Akinetisk mutism
Akinetisk mutism är benämningen som används då mutismen beror på neurologiska sjukdomstillstånd, exempel på sådana är olika demenstillstånd, hjärnblödning och hjärntumörer.