![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
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);
}
No.1ベストアンサー
- 回答日時:
定数はダブルコーテーションで囲まれた文字列内で変数のように展開されませんので、
$query .= "limit " . $offset . ", NUM_SHOPS" ;
は
$query .= "limit " . $offset . ", " . NUM_SHOPS;
にしないといけませんね。
ご指摘ありがとうございます。
アドバイス頂いたとおり改善することで解決しました。
見落としやすいミスでした。
きっちりこのようなミスをしないよう気をつけていきます。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHP MySql ページング 2 2022/09/20 06:38
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP PHP ページング データベース 1 2022/06/16 10:30
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- PHP php my adminより取り出したデータ表示 2 2022/06/15 11:56
- PostgreSQL 画像とカテゴリーを出力したいのですが、取得の条件を付ける方法がわかりません。 2 2022/05/01 18:03
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- PHP PHPでMysqlにデータがあるかどうか判別したい 1 2023/03/02 11:48
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
phpのエラーについてです
-
Resource id #3 をフィールドの...
-
連想二次元配列のUNIXTIMEでの...
-
sprintf関数での%Sが分かりませ...
-
XAMMPが起動しません。
-
mysql_fetch_objectのエラー
-
リストから詳細画面に遷移する...
-
検索結果の分割表示時のSQLエラー
-
インクルードによる不具合
-
MySQLに登録したデータをPHPで...
-
"と'の使い方を教えていただけ...
-
これでSQLインジェクション対策...
-
PHP と Mysql の連携時に発生す...
-
MySQLへデータ入力時の文字化け
-
MYSQLと連動したBASIC認証について
-
PHPの記述で値が取れません。
-
DBから抜き出した値を表示する方法
-
SQL Serverからのvarchar型のデ...
-
php テーブルを作れない
-
例外処理
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
phpのエラーについてです
-
テーブルに入っているデータと...
-
sqlから多次元配列に要素を格納...
-
PHPで絞り込み検索結果の件数を...
-
MySQLのデータを使ってプルダウ...
-
XAMMPが起動しません。
-
mysql_fetch_objectのエラー
-
mysql_resultのエラー
-
CSVをダウンロードさせた際、CS...
-
stringaddslashes 半角¥が消える
-
「mysqlclient」の事が分からな...
-
XAMPPで画面が真っ白になります。
-
会員登録したらメールが送られ...
-
PHP+mysqlでSQL文に文字数制限...
-
連想二次元配列のUNIXTIMEでの...
-
PHP/MySQL SQLエラーについて。
-
変数同士の引き算が出来ない
-
PHPでMySQLのレコードを削除したい
-
すいません。
-
インクルードによる不具合
おすすめ情報