-1

我有以下 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 表。

4

1 回答 1

1

当您执行 a$pdo->query($sql_statement)时,返回值是有效的PDOStatement,您可以直接迭代以获取结果,无需执行您的$s->execute()语句。

所以只需删除它:)

于 2013-07-26T06:20:53.320 回答