Php 我的异常简单的IF语句计算为false。。。当它';这是不可否认的事实!

Php 我的异常简单的IF语句计算为false。。。当它';这是不可否认的事实!,php,mysql,if-statement,Php,Mysql,If Statement,这个数组值是从MySQL数据库的CHAR(1)列中提取的。我已经转储了两个变量和两个返回字符串(1)p 我完全不知道为什么这个评估不正确,这真的让我大吃一惊。如果我执行p==p,它确实可以工作。另外,strcmp($array[$i]['positiveOrNegative'],p)返回1(表示它们不相同)。这到底是怎么回事 -----更新: 等等,我一定是摔得很厉害。。。。现在我的变量是: $array[$i]['positiveOrNegative'] 字符串(4)“p” 及 变量转储

这个数组值是从MySQL数据库的CHAR(1)列中提取的。我已经转储了两个变量和两个返回字符串(1)p

我完全不知道为什么这个评估不正确,这真的让我大吃一惊。如果我执行
p==p
,它确实可以工作。另外,
strcmp($array[$i]['positiveOrNegative'],p)
返回1(表示它们不相同)。这到底是怎么回事

-----更新:

等等,我一定是摔得很厉害。。。。现在我的变量是:

  • $array[$i]['positiveOrNegative']

  • 字符串(4)“p”

  • 变量转储(p)
  • 字符串(1)“p”
MySQL中的变量p是如何成为字符串(4)的

更多更新…
该列中的每个条目都是字符串(4),但它们都是一个字母(n或p)。此外,即使我用PHPMyAdmin手动插入字母,它们也是字符串(4)…

您是否尝试将数组打印到屏幕上以查看输出

if($array[$i]['positiveOrNegative'] == 'p')
通过这样做,您将能够看到数组的全部内容,任何奇怪的地方都会非常清晰地显示出来

我之所以提到这一点,是因为数据库如何处理它可能并不重要,只要它保存了一个您可以使用的值


因此,如果您目视检查操作结果,以确保没有任何异常情况发生,您可能能够在进行条件比较之前格式化该数据库输出。

将其回显并通过
od-c
运行。这将准确地告诉您PHP在变量中包含什么。从那里,您可以清理数据,也许可以首先修复插入这种格式错误的数据的过程

print_r($array[$i]['positiveOrNegative']);

如果字符串确实有4个字节,请尝试执行以下操作,以便进一步检查内容:

php somescript.php | od -c

@乔恩:是的,我试过了。看看我的更新吧@SLaks,没有-没有大写。@alex,嗯。也许吧。我的MySQL结构显示该列是
latin1\u swedish\u ci
请尝试使用$array[$i]['positiveOrNegative']中的其他字符var\u dump。我喜欢这个问题的标题。有一种佛教“禅”的感觉:生是死,悲是乐,真是假…@Jon-该专栏的所有变量都是string(4)@斯蒂芬,哈!谢谢你,伙计。哈哈哈。@Jesse我刚更新了问题看一看。我的变量只返回字母p的字符串(4)。。。这怎么可能?有什么方法可以纠正吗?@Shackrock你的问题是与MySQL还是与PHP有关,我对PHP的经验比MySQL的细节要丰富得多?如果你想知道MySQL的语义,我只能猜测MySQL会把你的“p”当作字符串(4),因为这是字符串数据类型的最小值?有点像C++编译器在只请求一个布尔值时,四个布尔值,并保留其他的值。@杰西-我真的不太在意MySQL中的…我只需要在变量点击比较->时正确表示它,那么我是否可以对变量执行一些PHP操作以使其返回字符串(1)?顺便说一句,它在数据库中已经是CHAR(1),据我所知,它不应该是string(4)…@Shackrock PHP是弱类型的,所以当您将数据类型分配给变量时,它应该为您解释和分配数据类型。也许可以尝试将该元素保存到局部变量,然后进行比较。我有一个朋友对MsSQL中的“bit”数据类型有类似的问题,我认为这只是一个转换问题,这就是为什么我认为这个PHP手动输入可能会有所帮助?[链接],或者alex可能是对的,你的字符集编码有点奇怪…@Jesse,我希望你。。哈哈。不,不走运。同样的结果。我觉得这太疯狂了。有一些字符串操作我可以使用吗?
print_r(array_map('ord', str_split($array[$i]['positiveOrNegative'])));