Php 从mysql表检索数据时如何忽略空格
我在PHP中与PDO一起工作。我遇到的问题是: 我有一张名为“产品”的桌子。它有一个名为Php 从mysql表检索数据时如何忽略空格,php,mysql,sql,Php,Mysql,Sql,我在PHP中与PDO一起工作。我遇到的问题是: 我有一张名为“产品”的桌子。它有一个名为product\u name的列。下面是一些产品名称的示例 product_name ---------- Bfilet de bœuf entier Bar de ligne Saumon entier Beurre 所以当我执行查询时 select * from products where produc
product\u 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检索数据时
有人能给我解释一下原因并提供解决方案吗?模式匹配
查找。代码类似于:
$stmt = $pdo->prepare('SELECT * FROM products WHERE product_name LIKE ?');
$stmt->execute(['Saumon entier%']);
var_dump($stmt->fetchAll());
编辑后,您似乎不希望像那样使用,但实际上在字符串末尾有一个空格。快速解决办法是:
SELECT * FROM products WHERE TRIM(product_name) = 'Saumon entier'
但实际上,您应该在输入时修剪空格
对评论中问题的答复
如果我有一个法国产品名称,如“Côde bœuf”,有没有办法替换口音
在大多数情况下,是的。如果您的数据库是utf8
,例如utf8\u unicode\u ci
,而ci
表示不区分大小写,则匹配:
SELECT 'Côte de boeuf' = 'cote de boeuf';
'Côte de boeuf' = 'cote de boeuf'
----------------------------------
1
请注意,我删除了œ
,因为这不匹配,我不确定它转换为哪个字符。
另一种选择是将“不带重音符号”的产品名称存储在不同的列中,并与之匹配。PHP手册中的Lookupiconv
。是“从”输入错误中选择的吗?这只是您对空格角色的猜测。在提问之前,您必须验证它。正如您所怀疑的,您可能在“entier”后面有一个空格。在提交到数据库之前清理数据。@brian demilia是的,这是一个输入错误。它可能只能治愈症状,但不能治愈疾病。@YourCommonSense这个答案现在是错误的,因为OP编辑了这个问题,并接受了其他含义:)@TooTSKI Perfect!这很有效,非常感谢。好的,但现在我有另一个问题,例如,如果我有一个法国产品名称,如“Côde bœuf”,有没有办法替换重音?所以,要寻找“博乌夫海岸”呢?@Arj补充道,这取决于你的情况,但应该是真实的。