次の PDO クエリは、開発サーバーでは問題なく動作しますが、ライブ サーバーでは空の結果セットを返します。
データベースの同一のコピーが両方のサーバーに存在し、httpd ログにも mysql ログにもエラー メッセージはありません。PDO 例外もありません。
<?
class DB {
public function __construct() {
global $dbh;
try {
$dbh = new PDO('mysql:host=localhost;dbname=snomweb_main', 'snomdb_user', '6pjOjYpcRpEZFdsu');
$dbh ->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
}
catch(PDOException $e) {
echo $e->getMessage();
}
}
public function getFAQCats2Array() {
global $dbh;
try {
$q = '
SELECT
`id` AS ci,
`name` AS n
FROM
`faqcat`;
';
$s = $dbh->query($q);
// initialise an array for the results
$A = array();
if ($s->execute()) {
while ($r = $s->fetch(PDO::FETCH_ASSOC)) {
$A[] = $r;
}
}
$s = null;
return $A;
}
catch(PDOException $e) {
echo "Something went wrong fetching the list of FAQ categories from the database.\n";
file_put_contents(
$_SERVER['DOCUMENT_ROOT']."/PDOErrors.txt",
"\n\n\n\n".$e->__toString(), FILE_APPEND);
}
}
}
(ファイルには他の関数がありましたが、簡単にするためにそれらを削除しました)
メソッドは次のように呼び出されます。
<?
require_once '../inc/classes/db.class.php';
$DB = new DB();
$cArr = $DB->getFAQCats2Array();
$qArr = $DB->getFAQQuestions2Array();
foreach ($cArr AS $c) { // do this for each group ?>
<h3><?=$c['n']?></h3>
<div>
<? foreach ($qArr AS $q) { // do this for each question in group
if ($q['ci'] === $c['ci']) {
?>
<a href="faq-answers.php?i=<?=$q['qi']?>" title=""><?=$q['q']?></a><br>
<?
} // end 'if'
} // /do this for each question in group
?>
</div>
<? } // /do this for each group ?>
コードは jQuery アコーディオンを構築しています。これは完成しており、開発環境で完全に動作しますが、ライブ サーバーでは、9 つの FAQ カテゴリを含む代わりに空の配列が返されます。
本番サーバーは、他の Web サイトで PDO を使用しており、MySQL Server バージョン: 5.0.37-standard を実行しています。
開発サーバーは MySQL サーバー バージョンを実行しています: 5.5.31-0ubuntu0.12.04.2-log - (Ubuntu)。
照合順序は両方utf8_general_ci
です。どちらも InnoDB テーブルを使用しています。