-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 つ​​の FAQ カテゴリを含む代わりに空の配列が返されます。

本番サーバーは、他の Web サイトで PDO を使用しており、MySQL Server バージョン: 5.0.37-standard を実行しています。

開発サーバーは MySQL サーバー バージョンを実行しています: 5.5.31-0ubuntu0.12.04.2-log - (Ubuntu)。

照合順序は両方utf8_general_ciです。どちらも InnoDB テーブルを使用しています。

4

1 に答える 1

1

を実行する$pdo->query($sql_statement)と、戻り値は有効であり、直接反復して結果を取得できます。文PDOStatementを実行する必要はありません。$s->execute()

だからそれを取り除くだけです:)

于 2013-07-26T06:20:53.320 に答える