我在PHP中使用PDO。我遇到的问题是:
我有一张叫做产品的桌子。它有一个名为product_name
的列。以下是产品名称的一些示例
product_name
----------
Bfilet de bœuf entier
Bar de ligne
Saumon entier
Beurre
所以当我执行查询时
select * from products where product_name='beurre'
工作正常。它返回相应的行。
但如果我这样做:
select _ from products where product_name='Saumon entier'"
它不会返回任何结果。当涉及空间时似乎有问题!
另一个不寻常的事情是,我似乎没有在SQL命令行上遇到此问题,只有当我使用PHP来检索数据时。
有人可以向我解释为什么并提供解决方案吗?
答案 0 :(得分:1)
查找MySQL pattern matching。代码类似于:
$stmt = $pdo->prepare('SELECT * FROM products WHERE product_name LIKE ?');
$stmt->execute(['Saumon entier%']);
var_dump($stmt->fetchAll());
编辑后,您似乎不想要LIKE
,但实际上您在字符串末尾有一个空格。快速修复将是:
SELECT * FROM products WHERE TRIM(product_name) = 'Saumon entier'
但实际上你应该在输入上修剪空格。
如果我有法国产品名称,例如'Côtedebœuf',有没有办法可以替换口音?
在大多数情况下,是的。如果您的数据库是utf8
,例如utf8_unicode_ci
,而ci
表示不区分大小写,则匹配:
SELECT 'Côte de boeuf' = 'cote de boeuf';
'Côte de boeuf' = 'cote de boeuf'
----------------------------------
1
请注意,我删除了œ
,因为它不匹配,我不确定它翻译的是哪个字符。
其他选项是将“非重音”产品名称存储在不同的列中并与之匹配。在PHP手册中查找iconv
。