前提・実現したいこと
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
1 /** 2 * お店情報を取得。 3 * 4 * @param Nagi_DB $db データベースオブジェクト 5 * @param integer $start 開始 6 * @param integer $length 取得数 7 * @param array $cond 取得条件 8 * @return array お店情報を格納した配列 9 * @throws データベースとのやり取りに失敗 10 */ 11 public static function get($db, $start, $length, $cond = array()) 12 { 13 try { 14 $params = array(); 15 $table = ABAHOUSE_Shop_DB::getTableName(self::$_language, 'shop'); 16 $sql = 'SELECT DISTINCT * FROM `' . $table . '` '; 17 if ($cond) { 18 $sql .= 'WHERE '; 19 $where = ''; 20 foreach ($cond as $k => $t) { 21 if ($where) { 22 $where .= 'AND '; 23 } 24 if ($k === 'area') { 25 if (!is_array($t)) { 26 $where .= '`area_id` = ? '; 27 $params[] = ABAHOUSE_Shop_Area::getId($db, $t); 28 } else 29 { 30 $tmp = ''; 31 foreach ((array)$t as $v) { 32 $tmp .= '?,'; 33 $params[] = $v; 34 } 35 $where .= '`area_id` IN (' . trim($tmp, ',') . ') '; 36 } 37 } 38 if ($k === 'genre') { 39 $where .= 'FIND_IN_SET(?, `kind`) '; 40 $params[] = $t; 41 } 42 if ($k === 'shop') { 43 $where .= '(FIND_IN_SET(?, `category`) OR FIND_IN_SET(?, `shop_brand`)) '; 44 $params[] = $t; 45 $params[] = $t; 46 } 47 if ($k === 'brand') { 48 $where .= '(`category` LIKE ? OR `brand` LIKE ?) '; 49 $params[] = '%' . $t . '%'; 50 $params[] = '%' . $t . '%'; 51 } 52 } 53 $sql .= $where; 54 } 55 $params[] = $start; 56 $params[] = $length; 57 58 $sql .= 'ORDER BY `area_id` LIMIT ?, ?'; 59 60 $stmt = $db->prepare($sql); 61 $stmt->execute($params); 62 $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); 63 64 $result = array(); 65 if ($rows) { 66 foreach ($rows as $row) { 67 $shop = new ABAHOUSE_Shop(); 68 $shop->name = $row['name']; 69 $shop->address = $row['address']; 70 $shop->map = $row['map']; 71 $shop->tel = $row['tel']; 72 //$shop->blog = $row['blog']; 73 $shop->blog = $row['blog'] ? explode(',', $row['blog']) : null; 74 $shop->site = $row['site']; 75 $shop->hours = $row['hours']; 76 $shop->shopBrand = explode(',', $row['shop_brand']); 77 $shop->kind = explode(',', $row['kind']); 78 $shop->brand = explode(',', $row['brand']); 79 $shop->category = explode(',', $row['category']); 80 $result[] = $shop; 81 } 82 } 83 return $result; 84 } 85 catch (PDOException $e) { 86 throw $e; 87 } 88 } 89
試したこと
以前の環境下では問題なく、動いていますので、環境が変わったことによるコードの修正が必要のようです。
また、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)
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/21 08:16
2020/10/21 08:30