前提・実現したいこと
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)
まだ回答がついていません
会員登録して回答してみよう