mysql查询可以手动工作,但从代码运行时不返回任何结果

时间:2009-05-31 10:45:56

标签: php mysql select sql-like

我使用“Like”的非常简单的查询来查找名称为

的产品
SELECT p_pid, p_name, p_cat
FROM products
WHERE p_sid=346 AND p_name LIKE 'product name here in utf-8 encoding, can be various languages'
LIMIT 1

当我从具有有效产品名称的代码运行此查询时,我得不到任何结果。如果我复制查询(由php回显到浏览器)并在mysql查询浏览器中手动运行,我会得到一个结果。知道我哪里错了吗?

注意:

1.查询中没有错误。没有结果。 我正在使用ezsql库 3.代码运行良好,并在代码的相同范围内成功地与数据库执行其他SELECT。

3 个答案:

答案 0 :(得分:3)

似乎是编码的问题。

尝试运行此查询:

SELECT HEX(CAST('product name here in utf-8 encoding, can be various languages' AS BINARY))

ezSQL和查询浏览器中,并比较结果。

这将为您提供MySQL真正从您的客户端获取并用于比较的二进制流。

如果在ezSQL属性中设置了错误的连接编码,则字符串可能会被破坏(例如,问号而不是UTF符号)。

在这种情况下,比较当然会失败。

<强>更新

尝试强制不区分大小写的排序规则:

SELECT  *
FROM    table
WHERE   field LIKE 'product name here in utf-8 encoding, can be various languages' COLLATE UTF8_GENERAL_CI

另外,您能否发布二进制转储您的字符串和字段中包含的数据?

SELECT  p_pid, p_name, p_cat,
        HEX(CAST(p_name AS BINARY)),
        HEX(CAST('product name here in utf-8 encoding, can be various languages' AS BINARY))
FROM    products
WHERE   p_pid = @pid_of_product_that_should_match_but_it_doesnt

答案 1 :(得分:1)

手动和自动运行脚本之间的机器,数据库和用户是否相同?当另一个访问生产服务器时,可以访问测试服务器(例如。)

答案 2 :(得分:0)

这可能是编码错误,而不是通过代码发送正确的信息,因此它正在搜索某些内容,因此缺少错误,但不是它要搜索的内容。手动扫描您的代码,重新执行位,看看您是否发现了可能存在问题的任何内容。

PHP的片段可能会有所帮助,如果它看起来似乎是编码错误。

希望这有助于。