我有以下 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 个常见问题类别。
生产服务器在其他网站上使用 PDO,并且运行 MySQL 服务器版本:5.0.37-standard。
开发服务器正在运行 MySQL 服务器版本:5.5.31-0ubuntu0.12.04.2-log - (Ubuntu)。
排序规则都是utf8_general_ci
. 两者都使用 InnoDB 表。