PHP变量在代码中不等于字符串,但打印时为字符串

PHP变量在代码中不等于字符串,但打印时为字符串,php,mysql,string,variables,Php,Mysql,String,Variables,已解决,请参见下文 我想检查mysql数据库中是否已经存在字符串 function checkStatus($articlename) { $articlename = mysql_real_escape_string($articlename); $query = "SELECT name FROM table WHERE name LIKE '$articlename' LIMIT 1"; echo $query; $result = mysql_query(

已解决,请参见下文

我想检查mysql数据库中是否已经存在字符串

function checkStatus($articlename)
{
    $articlename = mysql_real_escape_string($articlename);
    $query = "SELECT name FROM table WHERE name LIKE '$articlename' LIMIT 1";
    echo $query;
    $result = mysql_query($query);
    if(mysql_fetch_array($result) !== false)
        return true;
    return false;
}

if (checkStatus($element[$i]) == true)
    echo $element[$i];
元素[$i]未被打印,但当我将回显的$query复制到phpmyadmin中时,会得到一个结果。 另外,当我只是回显$element[$i]并复制/粘贴该值时,让我们将其Landskron Hell放入代码中以获取

$query = "SELECT name FROM table WHERE name LIKE 'Landskron Hell' LIMIT 1";
然后它也会起作用。所以打印的变量$element[$i]是字符串ABC,但在我的代码中它不是。为了核实这一点,我试过了

if ($element[$i] == 'Landskron Hell')
  echo "It worked!"
即使echo$element[$i]显示Landskron地狱,这也不起作用

我真的很困惑,非常感谢您的帮助

TL:DR一个PHP变量怎么可能不等于它在回显/打印时显示的字符串?

编辑:
var\u dump($query)
给出了
string(64)“从表中选择名称,其中名称如'Landskron Hell'LIMIT 1'
,而phpmyadmin中的精确查询正好给出了一行结果

EDIT2:感谢我添加的
andrewsi

$test = 'Landskron Hell';
var_dump($articlename);
var_dump($test);
它表明:

string(15) "Landskron Hell" string(14) "Landskron Hell"
所以很明显这是不同的!但这是什么

EDIT3我使用
strothex

function strToHex($value, $prefix = '') {
$result = '';
$length = strlen($value);
for ( $n = 0; $n < $length; $n++ ) {
    $result .= $prefix . sprintf('%02x', ord($value[$n]));
}
return $result;
}

显然有两个空格?在我的元素?但它们不是印刷品吗


已解决!:我使用了
$articlename=preg_replace('/\s+/',''$articlename)感谢安德鲁斯
让我走上正轨的人

这里有一个很好的函数,如果不存在,则返回false,如果存在,则返回值

// For a simple query that should return a single value, this returns just that value (or FALSE) so you can process it immediately 
function db_result_single($result)
{ 
    return ($row = mysql_fetch_row($result)) && isset($row[0]) ? $row[0] : false; 
}
这是我们的一个例子

我们可以对其进行修改,以便在该值已存在时返回true:

function db_result_single($result)
{ 
    return ($row = mysql_fetch_row($result)) && isset($row[0]) ? true : false; 
}

请注意,
mysql\u fetch\u row
从PHP 5.5.0开始就被弃用,因此应该避免使用它。

这里有一个很好的函数,如果不存在,则返回false,如果存在,则返回值

// For a simple query that should return a single value, this returns just that value (or FALSE) so you can process it immediately 
function db_result_single($result)
{ 
    return ($row = mysql_fetch_row($result)) && isset($row[0]) ? $row[0] : false; 
}
这是我们的一个例子

我们可以对其进行修改,以便在该值已存在时返回true:

function db_result_single($result)
{ 
    return ($row = mysql_fetch_row($result)) && isset($row[0]) ? true : false; 
}

请注意,
mysql\u fetch\u row
从PHP5.5.0开始就不推荐使用,因此应该避免使用它。

我注意到一个类似的问题。当我从mysql数据库中获取一个值,并将其与另一个具有相同字符和值的字符串进行比较时,它显示它们是两个不同的字符串。我不明白为什么会这样。

我注意到一个类似的问题。当我从mysql数据库中获取一个值,并将其与另一个具有相同字符和值的字符串进行比较时,它显示它们是两个不同的字符串。我不明白为什么会这样。

所有的
mysql\uu
函数都被弃用,因为
5.5.0
所有的
mysql\u
函数都被弃用,因为
5.5.0
尝试在要比较的两个字符串上使用
var\u dump
。它们将向您显示变量的确切含义-也许其中有尾随空格?此外,如果您使用LIKE,您可能还希望将
%
运算符添加到字符串中-否则,您将进行精确匹配,在这种情况下,您最好使用
=
。请尝试!我使用
$element[$I]=utf8_解码(trim($element[$I])之前,可能会出现问题?在调试时,
var\u dump()
是您最好的朋友之一。如果您的比较不起作用-
var\u dump()
查看双方为什么不相等。如果您的查询不起作用-
var\u dump
将其输出以查看您正在生成的SQL,这样您可以直接在数据库中运行它以查看它是否起作用。好的,也许我应该添加我的字符串包含空格,这可能很重要。所以它显示字符串(15)“Landskron Hell”是精确的。您可以尝试
var\u dump($query)
,并将结果添加到您的问题中吗?当您在数据库中运行该查询时,该查询是否工作?请尝试在要比较的两个字符串上使用
var\u dump
。它们将向您显示变量的确切含义-也许其中有尾随空格?此外,如果您使用LIKE,您可能还希望将
%
运算符添加到字符串中-否则,您将进行精确匹配,在这种情况下,您最好使用
=
。请尝试!我使用
$element[$I]=utf8_解码(trim($element[$I])之前,可能会出现问题?在调试时,
var\u dump()
是您最好的朋友之一。如果您的比较不起作用-
var\u dump()
查看双方为什么不相等。如果您的查询不起作用-
var\u dump
将其输出以查看您正在生成的SQL,这样您可以直接在数据库中运行它以查看它是否起作用。好的,也许我应该添加我的字符串包含空格,这可能很重要。所以它显示字符串(15)“Landskron Hell”是精确的。您可以尝试
var\u dump($query)
,并将结果添加到您的问题中吗?当您在数据库中运行该查询时,该查询是否起作用?这并不能提供问题的答案。您可以搜索类似的问题,或参考页面右侧的相关和链接问题以查找答案。如果您有一个相关但不同的问题,请提出一个新问题,并包括一个指向此问题的链接,以帮助提供上下文。请参阅:这并不是问题的答案。您可以搜索类似的问题,或参考页面右侧的相关和链接问题以查找答案。如果您有一个相关但不同的问题,请提出一个新问题,并包括一个指向此问题的链接,以帮助提供上下文。见: