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.