2013-06-18 136 views
0

我想設置一些屬性,以我的PDO連接,我使用的是連接到SQL Server ODBC的和drvier我得到未知屬性使用ODBC驅動程序setAttribute到PDO?

$db = new PDO("odbc:Driver={SQL Server};Server=127.0.0.1;Database=my_db;charset=utf8; Uid=my_usser;Pwd=my_pass;"); 
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
print_r($db->errorinfo()); 

//It show me: Array ([0] => 00000 [1] => 0 [2] => Unknown Attribute (setAttribute[0] at (null):0) [3] => IM001) 

我想設置PDO :: ATTR_EMULATE_PREPARES假怎麼我在這裏閱讀是一種安全的方式來停止使用準備functiom時的SQL注入。

回答

0

您必須使用準備好的語句以使其安全。
儘管EMULATE_PREPARES與安全性和安全性無關。

另外,您必須僅使用驅動程序支持的設置

+0

http://stackoverflow.com/questions/134099/are-pdo-prepared-statements-sufficient-to-prevent-sql-injection 它說有pdo->準備有時不是enoguh,我們需要使用$ pdo-> setAttribute(PDO :: ATTR_EMULATE_PREPARES,false); –

0

無法使用從Linux到MSSQL的預準備語句。在Windows上部署生產代碼並使用PDO SQLSRV驅動程序,或者不要使用預準備語句(這基本上意味着您不能使用Unicode)。