PDO の ATTR_EMULATE_PREPARES 属性に関する簡単な質問です。簡単に言えば、デフォルト (true) のままにしておくと、すべて正常に動作します。ただし、無効にすると、PHP エラー メッセージすら表示されず、「接続がリセットされました」というブラウザの警告が表示されるだけです。
参考までに、私が使用していたコードのサンプルを次に示します
<?php
include_once("config.php");
try {
$dbh = new PDO
(
"mysql:host=". DB_SERVER .";dbname=" . DB_NAME,
DB_USER,
DB_PASS,
array
(
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => true
)
);
} catch(PDOException $e) {
echo "<pre>";
print_r("Error: " . $e);
echo "</pre>";
die();
}
$idNum = "1";
$sth = $dbh->prepare("SELECT * FROM `table` WHERE `id` = ?;");
$sth->bindParam(1,$idNum);
$sth->execute();
$res = $sth->fetch();
?>
<pre>
<?=print_r($res); ?>
</pre>
私の素敵なテストテーブルからクエリをうまく返します...
Array
(
[id] => 1
[field1] => q12w3e4r5t6y7u8i9
[field2] => kijhgbfvcdoikujyh
)
しかし、PDO::ATTR_EMULATE_PREPARES の値を false に設定するのは簡単なことではありません。単純に失敗し、元の値に戻すまで再び失敗します。これの原因を突き止めるためにできることはありますか、それとも本当に簡単なことを見逃していましたか?
私のPHPバージョンは現在5.4.3で、MySQLは5.5.24です