webForumDet fria alternativet

Ett ljus tänt (?) om modern databasaccess

PHP

26 svar · 1 706 visningar · startad av itpastorn · sida 2 av 2

Frågan, av itpastorn

Eftersom jag vid tillfälle klagat på att det verkar som om ingen fattat att mysql-interfacet är osäkrare, långsammare och på de flesta sätt fulare än PDO, så har jag nu sökt råda bot på situationen. Sex mycket kommenterade exempel på hur man ansluter säkert och effektiv med PDO från en planerad bok om webbutveckling är nu upplagt på min hemsida. Följande länk räknas kanske som länkspam, men jag

Läs frågan i sin helhet →
Medlem sedan dec. 19996 721 inlägg
#21

itpastorn skrev:

Enligt killarna på MySQL ger prepared statements bättre prestanda än stored procedures.

MySQL hantering av SP är lite speciell, så det gäller definitivt där. Annars inte. Trots detta är jag en tillskyndare av att endast använda SP när det verkligen behövs....

itpastorn skrev:

Liksom triggers frestas man dessutom av dem att lägga affärslogik i sin databas, där den sortens logik inte hör hemma.

...av just det skälet.

Medlem sedan mars 20041 505 inlägg
#22

På tal om PDO, hur är det egentligen med utvecklingen av det?
Senaste stable släpptes för ett över ett år sedan.
Jag väntar fortfarande på att dom ska fixa den här buggen som ställer till massor av problem för mig.

Medlem sedan feb. 2007278 inlägg
#23

Troxy skrev:

På tal om PDO, hur är det egentligen med utvecklingen av det?
Senaste stable släpptes för ett över ett år sedan.
Jag väntar fortfarande på att dom ska fixa den här buggen som ställer till massor av problem för mig.

Har du röstat på den så att PHP-utvecklarna ser att intresse finns att få den åtgärdad?

Jag ser att PDO_ODBC inte främst anpassats till MSSQL ännu, så det kan ju ligga dig i fatet.

Utvecklingen gick annars ganska snabbt till och med PHP 5.1.6, sedan verkar Wez F ha fått annat att tänka på och utvecklingstakten har avstannat. Speciell efterlyser man från MySQL AB intresse att porta PDO-MySQL från libmyssql till mysqlnd.

På phpportalen håller vi också på att diskutera ett par intressanta buggar: http://www.phpportalen.net/viewtopic.php?t=83977

Korta versionen: Emulerade prepared statements för MySQL ger samma skydd som mysql_real_escape_string, men äkta prepared statements ger inte 100 % skydd på Windowsplattformen!

Medlem sedan feb. 2007278 inlägg
#24

itpastorn skrev:

http://keryx.se/dev/

Efter diskussion på främst phpPortalen, så är guiden nu uppdaterad.

Förändringar:
2007-07-01
Statusbeskrivning av säkerheten med PDO prepared statements och när det är aktuellt att avaktivera emulerade dito för MySQL.

Rör kommentarer i exempel 4 och tipsruta till exempel 6.

Diskussionen återfinns på adressen http://www.phpportalen.net/viewtopic.php?t=83977

Medlem sedan mars 200533 inlägg
#25

Hur fungerar PDO prepare med mysqls WHERE/AND IN()?

Alltså där ett värde är t.ex 1,2,4,9,12

Får t.ex inte följande att funger:

$sql = 'SELECT DISTINCT c.clip_id, c.title FROM clips c
LEFT JOIN clips_to_categories ctc ON (c.clip_id = ctc.clip_id)
WHERE ctc.category_id IN (:cid)
AND c.active = 1
ORDER BY c.clip_id DESC';
$stmt = $db->prepare($sql);
$stmt->execute(array(':cid' => isset($_GET['cid']) ? $_GET['cid'] : 0));

Medans = :cid och endast ett värde fungerar bra.

Är fortfarande lite skeptisk till PDO, inledde starkt med att få PHP att crasha med ett klassiskt "PHP has encountered an Access Violation at XXXXXXX", vilket jag inte sett på över 6 månader sen PHP 5.2.1 kom.

Medlem sedan juni 20008 205 inlägg
#26

Prepared statements och IN-klausulen är inte speciellt goda vänner någonstans, tyvärr, och det stämmer även för php. Det du får göra är att bygga upp sql-frågan dynamiskt så att in-satsen blir något i stil med WHERE ctc.category_id IN (:cid0, :cid1, :cid2), eller så får du fixa det på det gamla onda sättet genom att stoppa in värdena på direkten.

Medlem sedan mars 20041 505 inlägg
258 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)