2

解決済み 以下を参照

文字列がすでに 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 Hell を示していても、これは機能しません。

私は本当に混乱していて、助けていただければ幸いです!

TL:DR エコー/印刷時に PHP 変数が表示される文字列と等しくないのはどうしてですか?

編集: phpmyadminのこの正確なクエリは、結果として正確に1行を返しますvar_dump($query)string(64) "SELECT name FROM table WHERE name LIKE 'Landskron Hell' LIMIT 1"

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);THANKSを使用しました!andrewsi

4

2 に答える 2

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.0mysql_fetch_rowで非推奨になっているため、使用しないでください。

于 2013-11-14T20:48:14.440 に答える