dポイントプレゼントキャンペーン実施中!

PHP, MySQLで検索システムを作り、検索結果の分割表示をしようとしています。
その際、SQL文にエラーが生じるのですが、原因が調べてみてもわかりません。

検索条件のSQL文内のNUM_SHOPSという部分を数値に変えると1ページ目はきちんと分割表示されますが2ページ目以降が全件表示されてしまいます。
そして、NUM_SHOPSの部分をそのままにすると、SQLがエラーを起こします。var_dumpで$queryを確認すると、SQL文が二重に入ってしまっているのですが、どうしてこのような現象が起きるのかがいまいちわかりません。
アドバイス、ご指摘等いただけないでしょうか。
よろしくお願い致します。
以下に該当箇所のコードを記載します。

【result.php】
<?php
require_once('config.php');
require_once('functions.php');
connectDb();

if (preg_match('/^[1-9][0-9]*$/', $_GET['page'])) {
$page = (int)$_GET['page'];
} else {
$page = 1;
}

$offset = NUM_SHOPS * ($page - 1);

//クエリ生成
$query = "SELECT * FROM テーブル名";

//検索条件抽出
$where = array();
if (isset($_GET['area'])and($_GET['area'] !== '')) {
$where[] = sprintf("(area='%s')", mysql_real_escape_string($_GET['area']));
}

if (count($where) <> 0) {
$query .= ' where ' . implode(' and ', $where) . ' ORDER BY id DESC ';
}

if (count($where) <> 0) {
$query .= "limit " . $offset . ", NUM_SHOPS" ;
}

var_dump($query);

//Result
$result = mysql_query($query) or die($query . '<br />' . mysql_error() . '<hr />');

//検索結果件数カウント
$query = "SELECT COUNT(id) FROM テーブル名";
$where = array();
if (isset($_GET['area'])and($_GET['area'] !== '')) {
$where[] = sprintf("(area='%s')", mysql_real_escape_string($_GET['area']));
}

if (count($where) <> 0) {
$query .= ' where ' . implode(' and ', $where) . ' ORDER BY id DESC';
}

$total = mysql_result(mysql_query($query), 0);

$from = $offset + 1;
$to = ($offset + NUM_SHOPS) < $total ? ($offset + NUM_SHOPS) :
$total;

?>

【config.php】
<?php

define('DB_HOST', '*************');
define('DB_USER', '*************');
define('DB_PASSWORD', '*************');
define('DB_NAME', '*************');

//ページごとのショップ数
define('NUM_SHOPS', 10);
//エラー表示
error_reporting(E_ALL & ~E_NOTICE);

【functions.php】
<?php

function connectDb() {
mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) or die("can not connect to DB:".mysql_error());
mysql_select_db(DB_NAME) or die("can not select DB: ".mysql_error());
}

function h($s) {
return htmlspecialchars($s);
}

A 回答 (1件)

定数はダブルコーテーションで囲まれた文字列内で変数のように展開されませんので、


$query .= "limit " . $offset . ", NUM_SHOPS" ;

$query .= "limit " . $offset . ", " . NUM_SHOPS;
にしないといけませんね。
    • good
    • 0
この回答へのお礼

ご指摘ありがとうございます。
アドバイス頂いたとおり改善することで解決しました。
見落としやすいミスでした。
きっちりこのようなミスをしないよう気をつけていきます。

ありがとうございます。

お礼日時:2012/12/07 17:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!