PHPのPDOクラス(mysqlドライバ)で検索しようとしています。私は(テーブル名は無実を保護するために変更された)MySQLクライアントでの作業次のクエリを持っている:PHP PDO準備文 - MySQL LIKEクエリ
SELECT hs.hs_pk,
hs.hs_text,
hs.hs_did,
hd.hd_did,
hd.hd_text,
hv.hv_text,
hc.hc_text
FROM hs
LEFT JOIN hd
ON hs.hs_did = hd.hd_did
LEFT JOIN hd
ON hd.hd_vid = hv.hv_id
LEFT JOIN hc
ON hd.hd_pclass = hc.hc_id
WHERE hs.hs_text LIKE "%searchTerm%"
LIMIT 25;
これは関係なく、私が使用する検索用語の魔法のように動作します。しかし、私はPHPに移動すると、私は何かを返すようにすることはできません。論理的に見えるいくつかの構文を試しましたが、何も試したことがありません。私は(句&分取を>実行行はすべてその変更をされているSQL)だけでなく、次の試してみた
$handle = fopen('/foo/bar/test.log', 'w+');
fwrite($handle, "doSearch, with search term: $searchTerm\n");
$sql =
'SELECT hs.hs_pk,
hs.hs_text,
hs.hs_did,
hd.hd_did,
hd.hd_text,
hv.hv_text,
hc.hc_text
FROM hs
LEFT JOIN hd
ON hs.hs_did = hd.hd_did
LEFT JOIN hd
ON hd.hd_vid = hv.hv_id
LEFT JOIN hc
ON hd.hd_pclass = hc.hc_id
WHERE hs.hs_text LIKE :searchTerm
LIMIT 25';
try {
$dbh = new PDO('mysql:host=localhost;dbname=awdb', "user", "password");
fwrite($handle, "connected to DB\n");
$prep = $dbh->prepare($sql);
$ret = $prep->execute(array(':searchTerm' => '"%'.$searchTerm.'%"'));
while ($row = $prep->fetch(PDO::FETCH_ASSOC)) {
$i++;
$result[$i]['subText'] = $row['hs_pk'];
$result[$i]['subText'] = $row['hs_text'];
$result[$i]['subDid'] = $row['hs_did'];
$result[$i]['devDid'] = $row['hd_did'];
$result[$i]['devText'] = $row['hd_text'];
$result[$i]['vendorText'] = $row['hv_text'];
$result[$i]['classText'] = $row['hc_text'];
}
$dbh = null;
}
catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
:ここに私の既存のコードです
WHERE hs.hs_text LIKE CONCAT(\'%\', ?, \'%\')
$ret = $prep->execute(array($searchTerm));
WHERE hs.hs_text LIKE "%:searchTerm%"
$ret = $prep->execute(array(':searchTerm' => $searchTerm));
WHERE hs.hs_text LIKE ":searchTerm"
$ret = $prep->execute(array(':searchTerm' => '%'.$searchTerm.'%'));
等...
それはちょうど転置の問題かもしれないが、あなたは、SQL文を同封していない - あなたは、アポストロフィ( ')を配置する必要がありますそれの終わりに。 –
転置の問題でした。もし私が忘れてしまったのは、PHPが完全に驚いたのは確かです。しかし、非常に迅速な返信をありがとう。 – TIm
var_dump()$ dbh、$ prep、$ retのときはどうなりますか?彼らはあなたが期待する価値ですか?比較のためにmysql_ *ファミリーの関数を使って同じクエリを実行しようとしましたか?ここ – jkndrkn