データベースにある製品情報をWEBブラウザで閲覧するアプリをPHPで作成しております。
製品の名前を検索できるページがあるのですが、
ローカルの開発環境では問題なくSQLのLIKE句によるあいまい検索ができるのですが、
Windows Server上にアップすると、
全文一致はできますが、あいまい検索ができなくなり、結果が取得できません。
いろいろ調べたのですが、解決できず、
ぜひともお力添えをいただければ幸いです。
PHPバージョン:7
データベースの場所
サーバーA
・Windows Server 2008 SP2
・IIS 6
・SQL server 12
◎あいまい検索ができる環境
ローカルの開発環境
・Windows10
・IIS 10
×あいまい検索ができない環境(※全文一致は可能)
サーバーB
・Windows Server 2008 SP2
・IIS 6
ともにローカルからChromeでアクセスしています。
HTMLは下記のようにしており
HTML
1<div class="nameArea"> 2 <label>製品名</label> 3 <input type="text" id="name"> 4</div> 5 6<button type="button" class="sendFrom">検索</button>
SQLは下記のように発行しております。
PHP
1$sql = <<<SQL 2SELECT 3 NAME 4FROM 5~ 6WHERE 7 NAME LIKE ? 8SQL; 9 10 $stmt = $dbh->prepare($sql ); 11 $stmt->execute(array(sprintf('%%%s%%', addcslashes($name, '\_%'))));
検証
あいまい検索ができないサーバーBに対して下記の検証を行いました。
製品名:ホゲのパソコン
値をスタティックにした場合
$stmt = $dbh->prepare($sql ); stmt->execute(["%ホゲの%"]);
結果が返ってこず。
プレースホルダを止め、SQL文に直接値を記述
$sql = <<<SQL SELECT NAME FROM ~ WHERE NAME LIKE %ホゲの% SQL; $stmt = $dbh->query($sql );
返ってきました。
プレースホルダへの値の入れ方が悪いのでしょうか…。
全文一致は問題ないので、
ワイルドカード「%」が入ると、サーバーBで何かが起こる…?
あいまい検索ができるローカル環境と、
できないサーバーBの違いといえば、
OS(Windows10 or Windows server 2008)
IISのバージョン(10 or 6)なのですが…
回答2件
あなたの回答
tips
プレビュー