我正在失去主意。此查詢工作正常時的SQLite管理器(FF插件)執行(找到一個匹配的記錄):當字符串包含'&'時,SQLite中的字符串比較不起作用
SELECT * FROM VendorDB WHERE lower(CompanyName) = 'b&b'
但這variablized SELECT語句(這是完全一樣的,當上述出回顯)未找到任何東西。
SELECT * FROM VendorDB WHERE lower(CompanyName) = [vendor variable containing 'b&b]
當字符串不包含一個「&」兩個查詢工作一樣。我已經搜索了所有內容,無法找到任何有關爲什麼查詢不應始終如一的工作。
順便說一句,我使用PHP:PDO來執行查詢。
EDIT_1: 下面介紹如何查詢被處理,其中$胸徑數據庫連接(實現從@Phil的建議後):
$qry = "SELECT * FROM VendorDB WHERE lower(CompanyName) = ?";
//[$vendor is the variable containing 'b&b]
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$go_fetch = $dbh->prepare($qry);
$go_fetch->bindParam(1,$vendor);
$go_fetch->execute();
,結果檢索爲:
$go_fetch->setFetchMode(PDO::FETCH_ASSOC);
$data = $go_fetch->fetchAll();
所有這些都會產生一個空數組,但應該只產生一個記錄。
另外請注意,我已經回顯變量$供應商的價值被插入查詢之前,它是正確值(即「B & B」不'b&b'
)
是&也許是html實體'&'? – 2014-03-28 00:22:20
_「這與上面的echo'd out完全相同」_ - 你是否確信......在第二個查詢中不是'&'? – CBroe
來自哪裏的價值以及如何將其注入查詢?你應該使用'bindParam' /'bindValue'綁定它,或者將它傳遞給'execute'方法 – Phil