/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
PDO:mssql, quote giver fejl?!?
Fra : Leif Neland


Dato : 30-05-11 14:53

Det er jo god latin at prepared statements giver sikring imod sql-injects og
bøvl med specielle tegn.

Men jeg bruger

$dbh = new PDO ("dblib:host=$hostname;dbname=$dbname","$username","$pw");
$sth=$dbh->prepare("update t_produkter set beskrivelse=? where id=?");
$id=123;
$beskrivelse="Flagstang, 12' hvid";
$sth->execute(array($beskrivelse,$id));

Jeg får warning:
Warning: PDOStatement::execute() [pdostatement.execute]: message: Unclosed
quotation mark before the character string 'Flagstang. 3'. (severity 15) in
xxx.php on line 26

Det ser jo ud til at dblib bare laver en simpel tekstsubstitution, og fodrer
mssql med en komplet sql-sætning, der hedder
update t_produkter set beskrivelse='Flagstang, 12' hvid' where id=123

Og hvor er beskyttelsen så?!?

Leif





 
 
Birger Sørensen (30-05-2011)
Kommentar
Fra : Birger Sørensen


Dato : 30-05-11 15:17

Leif Neland udtrykte præcist:
> Det er jo god latin at prepared statements giver sikring imod sql-injects og
> bøvl med specielle tegn.
>
> Men jeg bruger
>
> $dbh = new PDO ("dblib:host=$hostname;dbname=$dbname","$username","$pw");
> $sth=$dbh->prepare("update t_produkter set beskrivelse=? where id=?");
> $id=123;
> $beskrivelse="Flagstang, 12' hvid";
> $sth->execute(array($beskrivelse,$id));
>
> Jeg får warning:
> Warning: PDOStatement::execute() [pdostatement.execute]: message: Unclosed
> quotation mark before the character string 'Flagstang. 3'. (severity 15) in
> xxx.php on line 26
>
> Det ser jo ud til at dblib bare laver en simpel tekstsubstitution, og fodrer
> mssql med en komplet sql-sætning, der hedder
> update t_produkter set beskrivelse='Flagstang, 12' hvid' where id=123
>
> Og hvor er beskyttelsen så?!?
>
> Leif

http://dk.php.net/manual/en/pdo.quote.php
Du skal åbenbart quote strenge, der skal bruges til statementen.
svarer vel nogenlunde til mysqli's bind_param()

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Leif Neland (30-05-2011)
Kommentar
Fra : Leif Neland


Dato : 30-05-11 17:39

Den 30-05-2011 16:16, Birger Sørensen skrev:
> Leif Neland udtrykte præcist:
>> Det er jo god latin at prepared statements giver sikring imod
>> sql-injects og bøvl med specielle tegn.
>>
>> Men jeg bruger
>>
>> $dbh = new PDO ("dblib:host=$hostname;dbname=$dbname","$username","$pw");
>> $sth=$dbh->prepare("update t_produkter set beskrivelse=? where id=?");
>> $id=123;
>> $beskrivelse="Flagstang, 12' hvid";
>> $sth->execute(array($beskrivelse,$id));
>>
>> Jeg får warning:
>> Warning: PDOStatement::execute() [pdostatement.execute]: message:
>> Unclosed quotation mark before the character string 'Flagstang. 3'.
>> (severity 15) in xxx.php on line 26
>>
>> Det ser jo ud til at dblib bare laver en simpel tekstsubstitution, og
>> fodrer mssql med en komplet sql-sætning, der hedder
>> update t_produkter set beskrivelse='Flagstang, 12' hvid' where id=123
>>
>> Og hvor er beskyttelsen så?!?
>>
>> Leif
>
> http://dk.php.net/manual/en/pdo.quote.php
> Du skal åbenbart quote strenge, der skal bruges til statementen.
> svarer vel nogenlunde til mysqli's bind_param()
>
Der står jo netop på den side, at man i stedet for at quote bør bruge
prepare...

If you are using this function to build SQL statements, you are strongly
recommended to use PDO::prepare() to prepare SQL statements with bound
parameters instead of using PDO::quote() to interpolate user input into
an SQL statement. Prepared statements with bound parameters are not only
more portable, more convenient, immune to SQL injection, but are often
much faster to execute than interpolated queries, as both the server and
client side can cache a compiled form of the query.

Hvad i alverden skal man så bruge til at lave prepared statements fra
php5.3 til mssql?

Leif



--
Bevar P2, luk P3, der er nok P3'er i forvejen.

Søg
Reklame
Statistik
Spørgsmål : 177416
Tips : 31962
Nyheder : 719565
Indlæg : 6407862
Brugere : 218876

Månedens bedste
Årets bedste
Sidste års bedste