On 13-12-2012 11:17, Kurt Hansen wrote:
> Ikke at jeg vil gå i gang med et flere årigt studium, men et
> grundlæggende kendskab til php/mySQL ville nok ikke være nogen skade til.
>
> Jeg fandt en tutorial, hvor det engelske sprog ikke er så teknisk, men
> allerede i de indledende øvelser, går det galt.
>
> Eksemplet med at connecte til serveren og derpå til en database går
> fint. Da jeg ikke lige havde tid til at fortsætte, ville jeg logge ud
> igen, men det har de åbenbart gemt til en senere lektion. Det kan godt
> være at jeg er overfølsom, men at lukke døren efter mig, sidder dybt i
> flæsket på mig.
>
> Ok, jeg fandt en anden tut og spillede igennem, men også den giver
> disconnecter man (inkl. skærmkvittering for handlingens udførelse)?
1: Hvis du ser en tutorial hvor mysql_connect bliver brugt, så tager du
tutorialen og smider den aller helvedes væk :)
Husk at mysql_* er deprecated, sløv, gammel og er fejlbehæftet.
Istedet så søger du efter php pdo tutorial
<
http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/>
<
http://www.phpeveryday.com/articles/PHP-Data-Object/PDO-Tutorial-P842.html>
Den sidste er god, da den er opdelt i faser
-- Connecte til databasen
$DBH = new PDO("mysql:host=HOST;dbname=DATABASENAVN", BRUGERNAVN, KODEORD);
(alt med stort erstattes af dine egne variabler)
-- Indsætte i databasen (unnamed placeholders)
$STH = $DBH->("INSERT INTO folks (name, addr, city) values (?, ?, ?);
(preparing dine felter, alle spørgsmåls tegn erstattes af nedenstående
variabler)
$name = "Daniel"
$addr = "1 Wicked Way";
$city = "Arlington Heights";
$STH->bindParam(1, $name);
$STH->bindParam(2, $addr);
$STH->bindParam(3, $city);
$STH->execute(); // Her udføres queryen
$name = "Endnu en"
$addr = "Adresse";
$city = "i en by";
$STH->execute(); // Her udføres queryen 2. gang, bemærk vi behøver ikke
binde variablerne, da de allerede er bundet
Istedet for ? i queryen så kan vi også lege med named placeholder
-- Indsætte i databasen (named placeholders)
$data = array( 'name' => 'Cathy', 'addr' => '9 Dark and Twisty', 'city'
=> 'Cardiff' );
$STH = $DBH->("INSERT INTO folks (name, addr, city) value (:name, :addr,
:city)");
$STH->execute($data);
$moredata = array( 'name' => 'Cathy', 'addr' => '9 Dark and Twisty',
'city' => 'Cardiff' );
$STH->execute($moredata);
-- Selecte data
$STH = $DBH->query('SELECT name, addr, city from folks');
$STH->setFetchMode(PDO::FETCH_ASSOC);
while($row = $STH->fetch()) {
echo $row['name'] . "\n";
echo $row['addr'] . "\n";
echo $row['city'] . "\n";
}
Denne ligner meget mysql_select delen, så den går vi ikke nærmere med
-- Update
$STH = $DBH->("UPDATE books SET title=?, author=? WHERE id = ?");
$STH->bindParam(1, 'Min titel');
$STH->bindParam(2, 'Forfatter');
$STH->bindParam(3, 2); // ID
$STH->execute();
Det kan også gøres med named placeholders selvfølgelig
$STH = $DBH->("UPDATE books SET title=:bogtitel, author=:forfatter WHERE
id = :uniknummer");
$data = array(
'bogtitel' => 'Min titel',
'forfatter' => 'Ole Bole',
'uniknummer' => 5
);
$STH->execute($data);
Så PDO handler om at binde variabler istedet for bare at indsætte det
direkte i databasen.
Hvad fordelen er at PDO selv tjekker for alt muligt såsom hvad input er osv.
Dvs at
'bogtitel' => 'Min titel\';delete from books where 1=1;/*'
ikke er muligt