【问题标题】:mysql query works manually but returns no results when running from codemysql查询手动工作,但从代码运行时不返回结果
【发布时间】:2010-10-30 05:32:16
【问题描述】:

我使用一个非常简单的查询“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.查询没有错误。就是没有结果。 2.我正在使用ezsql库 3. 代码运行良好,并在代码的同一范围内成功执行了与数据库的其他SELECT。

【问题讨论】:

  • 你确定你使用的是 UTF-8 吗?

标签: php mysql select sql-like


【解决方案1】:

似乎是编码的问题。

尝试运行此查询:

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

【讨论】:

  • 我试过了,流完全一样(仔细检查)
  • 更新:我将 select 参数从 'product name' 更改为 '%product name%' 并且它有效。我不认为有任何空白,因为我将查询直接从 php 输出(不工作)复制到 mysql 管理员(工作)所以我没有解释为什么它不工作但它现在工作所以我'我会继续前进。感谢您的帮助!
【解决方案2】:

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

【讨论】:

  • 我在同一台机器上(都在测试服务器上)同一个数据库。
【解决方案3】:

可能是编码错误,没有通过代码发送正确的信息,所以它正在搜索某些东西,因此没有错误,但不是它要搜索的内容。手动扫描你的代码,重新做一些位,看看你是否发现了任何可能有问题的地方。

如果出现编码错误,PHP 的代码片段可能会有所帮助。

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-30
    • 1970-01-01
    • 2013-08-24
    相关资源
    最近更新 更多