为什么两个字符串(它们看起来相同)有不同的ascii代码?

时间:2015-04-16 17:53:03

标签: php sql wordpress

我遇到字符串比较问题。我有两个字符串,它们有两个不同的ASCII代码: Temat 1 - ASCII:620 Temat 1 - ASCII:588

Ascii由此函数生成:

for ($i = 0; $i < strlen($string); $i++) 
    { 
        $ascii += ord($string[$i]); 
    }

我认为这就是我的SQL查询给我一个空结果的原因。 当我这样做时:

$resultsT = $wpdb->get_results( 'SELECT post_id FROM wp_postmeta WHERE meta_key = "temat" AND meta_value = "'.$temat.'"', OBJECT );

查询结果为空。 但是当我这样做时:

$resultsT = $wpdb->get_results( 'SELECT post_id FROM wp_postmeta WHERE meta_key = "temat" AND meta_value = "Temat 1"', OBJECT );

查询没问题。

1 个答案:

答案 0 :(得分:1)

问题中的信息不多,但我猜测它在数据库中的区分大小写。请注意,ASCII码总和之差为32,即ASCII中大写和小写字母之间的差异。所以我猜你的PHP代码将$ temat设置为字符串&#34; t emat 1&#34;,但meta_value是&#34; T emat 1&#34;大写&#34; T &#34;。这将解释ASCII码差异和未返回预期结果的查询。

编辑:新评论说变量$ temat设置为&#34; temat&#34;。那么问题是meta_value是&#34; Temat 1&#34;并且查询正在寻找&#34; temat&#34;。他们不平等。你想要添加缺少的&#34;的 1 &#34;到post变量$ temat,或者使用LIKE查询来匹配以字符串开头的所有内容&#34; temat&#34;:

post_id FROM wp_postmeta WHERE meta_key = "temat" AND meta_value like "'.$temat.'%"', OBJECT );

编辑2:没有给出post变量的值 - 我误读了代码,因为它将字符串设置为字符串&#34; temat&#34;当它实际上设置为post变量的值时,名称为&#34; temat&#34;。