PHP 5.2.9とApache 2.2.11とmysqlを使用しています。5.1.32PDO :: ATTR_EMULATE_PREPARESを無効にできないのはなぜですか?
なぜPDO :: ATTR_EMULATE_PREPARESを無効にできませんか?
<?php
try{
$conn = new PDO("mysql:host=$DB_SERVER;dbname=$DB_NAME",$DB_USER,$DB_PASS, array(PDO::ATTR_EMULATE_PREPARES => false));
}
catch(PDOException $pe){
die('Connection error : ' .$pe->getMessage());
}
$st = $conn->prepare('abc');
echo "emulate : " . $st->getAttribute(PDO::ATTR_EMULATE_PREPARES);
?>
出力 ":1をエミュレート" である:以下
コードです。私もコードを試しました:
$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
しかし、出力は同じ値 "1"です。値が正しくない場合、出力は0になりますか?しかし、なぜ出力は1ですか? ATTR_EMULATE_PREPARESを無効にするにはどうすればよいですか?
'5'に置き換えられた場合、ステートメントはバインドされたパラメータを使用していないことを意味します。バインドされたパラメータはSQLインジェクションを防止するために使用されますが、現在はprepareをエミュレートするとバインドされたパラメータは使用されないため、SQLインジェクションの権利を妨げることはできません。だから私はエミュレート設定する必要があります=>偽それだけでSQLインジェクションの権利を防ぐことができますか? – zac1987
パラメータを正しくエスケープする限り、SQLインジェクションからあなたを守ります。 –
私は私のオンラインWebホスティングでphpバージョン5.2.14を実行しているテストで、エミュレート準備を無効にすることができます。だから、PHPのバージョンの問題ではありません。私はWAMP Serverのオフラインlocalhostエミュレートを無効にできないと思いますか? – zac1987