質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

解決済

【PHP・MySQL】SQLSTATE[42000]のSQL構文エラーが発生する

youplus40
youplus40

総合スコア9

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

3回答

0評価

0クリップ

1175閲覧

投稿2020/10/21 07:20

前提・実現したいこと

PHPで店舗検索の機能が以前実装されており、今回バージョンが上がったローカル環境下で動くか確認したところ、
下記のエラーが発生しております。
エラーがどこで起きているのか、教えていただきたいです。

発生している問題・エラーメッセージ

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''0', '20'' at line 1

該当のソースコード

PHP

/** * お店情報を取得。 * * @param Nagi_DB $db データベースオブジェクト * @param integer $start 開始 * @param integer $length 取得数 * @param array $cond 取得条件 * @return array お店情報を格納した配列 * @throws データベースとのやり取りに失敗 */ public static function get($db, $start, $length, $cond = array()) { try { $params = array(); $table = ABAHOUSE_Shop_DB::getTableName(self::$_language, 'shop'); $sql = 'SELECT DISTINCT * FROM `' . $table . '` '; if ($cond) { $sql .= 'WHERE '; $where = ''; foreach ($cond as $k => $t) { if ($where) { $where .= 'AND '; } if ($k === 'area') { if (!is_array($t)) { $where .= '`area_id` = ? '; $params[] = ABAHOUSE_Shop_Area::getId($db, $t); } else { $tmp = ''; foreach ((array)$t as $v) { $tmp .= '?,'; $params[] = $v; } $where .= '`area_id` IN (' . trim($tmp, ',') . ') '; } } if ($k === 'genre') { $where .= 'FIND_IN_SET(?, `kind`) '; $params[] = $t; } if ($k === 'shop') { $where .= '(FIND_IN_SET(?, `category`) OR FIND_IN_SET(?, `shop_brand`)) '; $params[] = $t; $params[] = $t; } if ($k === 'brand') { $where .= '(`category` LIKE ? OR `brand` LIKE ?) '; $params[] = '%' . $t . '%'; $params[] = '%' . $t . '%'; } } $sql .= $where; } $params[] = $start; $params[] = $length; $sql .= 'ORDER BY `area_id` LIMIT ?, ?'; $stmt = $db->prepare($sql); $stmt->execute($params); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); $result = array(); if ($rows) { foreach ($rows as $row) { $shop = new ABAHOUSE_Shop(); $shop->name = $row['name']; $shop->address = $row['address']; $shop->map = $row['map']; $shop->tel = $row['tel']; //$shop->blog = $row['blog']; $shop->blog = $row['blog'] ? explode(',', $row['blog']) : null; $shop->site = $row['site']; $shop->hours = $row['hours']; $shop->shopBrand = explode(',', $row['shop_brand']); $shop->kind = explode(',', $row['kind']); $shop->brand = explode(',', $row['brand']); $shop->category = explode(',', $row['category']); $result[] = $shop; } } return $result; } catch (PDOException $e) { throw $e; } }

試したこと

以前の環境下では問題なく、動いていますので、環境が変わったことによるコードの修正が必要のようです。
また、DBをMariaDBからMySQLに変更しましたが、同様にエラーが発生しました。

補足情報(FW/ツールのバージョンなど)

以前の環境
・apache 2.2
・PHP 5.1.6
・mysql 不明
・Linux (CentOS6.7)

現在のローカル環境
・apache 2.4.46
・PHP 7.4.11
・MariaDB 10.4.14
・Windows (XAMPP3.2.4)

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます