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

时间:2013-11-14 20:34:06

标签: 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($query);
    if(mysql_fetch_array($result) !== false)
        return true;
    return false;
}

if (checkStatus($element[$i]) == true)
    echo $element[$i];

元素[$ i]没有打印,但是当我将回显的$查询复制到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 Hell,这也不起作用。

我真的很困惑,希望得到任何帮助!

TL:DR如何将PHP变量与回显/打印时显示的字符串相等?

修改: var_dump($query)提供了string(64) "SELECT name FROM table WHERE name LIKE '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 我使用strToHex

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

结果是:

%4c%61%6e%64%73%6b%72%6f%6e%20%20%48%65%6c%6c

%4c%61%6e%64%73%6b%72%6f%6e%20%48%65%6c%6c
显然有2个空格?在我的元素?但它们没有印刷?

已解决!:我使用$articlename = preg_replace('/\s+/', ' ',$articlename);感谢andrewsi让我走上正轨!

2 个答案:

答案 0 :(得分: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; 
}

这是php.net

的示例

我们可以修改它,以便在值已经存在时返回true:

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

请注意,自PHP 5.5.0起,mysql_fetch_row已弃用,因此应避免使用。

答案 1 :(得分:-1)

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