所以我有一个函数从表单中获取一些字符串变量(在提交表单之后),然后使用这些变量运行查询并返回结果行。 我有几个条件可以正常工作,除了一个,我无法弄清楚什么是错的。 当我打印出查询并在phpMyadmin中运行它 - 它工作正常(例如返回3行),但它不在页面上运行(显示返回0 rwos)。 我注意到的一件事是,当我执行var_dump时,它会给出正确的类型(字符串),但长度不正确。修剪没有任何区别。 例如
$name2 = "John Doe";
var_dump($name1);
var_dump($name2);
name2返回字符串(8) 但是当name1返回string(9)时,即使name1也是“John Doe” - 我也不知道那个额外的字符是什么。 该变量来自一个表单,来自select元素。选择是从表中填充的。在分配给name1之前,我修剪了结果POST值。对于select元素中的名称来自的表和我运行查询的表,字符编码是相同的。 如果我不添加名称,表单中的所有其他变量都正常传递并且查询正确运行。再次,如果我打印出查询(包括名称条件)并复制并粘贴到phpMyAdmin - 它运行正常。 我在这里疯了。
答案 0 :(得分:1)
初看起来这可能是字符编码问题。
我不知道发生了什么(我的数据很少)但是我建议扫描两个字符串(实际的字符串和你正在等待的字符串)并返回字符以供进一步调查:< / p>
function compare($s1, $s2) {
$i = 0;
while ($s1[$i]) {
if ($s1[$i] != $s2[$i]) return array($s1[$i], $s2[$i]);
$i++;
}
}
var_dump(compare($name1, $name2));
编辑: 也许一些php行将帮助我更好地解释我的意思。字符串看起来是等于,但它们不是第二个中的A是在{1}上呈现的 屏幕为A(但计算两个字节,因此不同的strlen)
mb_internal_encoding('UTF-8');
$plainOldAscii = 'TASTE';
$aBitOfCyrillic = html_entity_decode('TАSTE', ENT_NOQUOTES,'UTF-8');
echo "$plainOldAscii -> " . strlen($oldPlainAscii)
. " -> " . mb_strlen($oldPlainAscii)
. "\n$aBitOfCyrillic -> " . strlen($aBitOfCyrillic)
. " -> " . mb_strlen($aBitOfCyrillic)
. "\n";
答案 1 :(得分:0)
可能你的$ name1就像“John Doe”,末尾有空格或者开头有空格......
答案 2 :(得分:0)
好的,这是一个数据库问题。 仍然不知道这怎么可能 - 数据库中的名称或奇怪的字符中没有额外的空格。编码是正确的,虽然在数据库中是相同的,但是在屏幕上打印出名称,然后复制并插入名称表中修复它。即使没有明显的区别。怪异。