我遇到字符串比较问题。我有两个字符串,它们有两个不同的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 );
查询没问题。
答案 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;。