我有以下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类别。
生产服务器在其他网站上使用PDO,并运行MySQL Server版本:5.0.37-standard。
开发服务器正在运行MySQL Server版本:5.5.31-0ubuntu0.12.04.2-log - (Ubuntu)。
排序规则均为utf8_general_ci
。两者都使用InnoDB表。
答案 0 :(得分:1)
当您执行$pdo->query($sql_statement)
时,返回值是有效的PDOStatement
,您可以直接迭代以获取结果,而不需要执行$s->execute()
句。
所以只需删除它:)