Bir php md5 dizeden MySql bir alanı kontrol

5 Cevap php


I'm trying to validate a pair of data columns on mysql from my php page across md5 function.
I've encrypted the string "helloworld" with php md5 function and attempted to compare it with MYSQL MD5 function but it won't work.
I do this because in the database there is a pair of strings "hello" and "world" needs to be compared with my php string, so:

<?php
$str_a = "hello";
$str_b = "world";
$str_encrypted = md5 ($str_a.$str_b);

// note "first_col" is "hello" and "second_col" is "world"
$sql = "UPDATE `my_table` SET `checked_col` = '1' WHERE MD5(CONCAT(first_col,second_col)) = '$str_encrypted' LIMIT 1;";
$res = mysql_query ($sql) or die (mysql_error());

($res) ? print "true" : print "false";
?>

Bu kod bana return false, ve veritabanı UPDATE sütun checked column, ama mysql_error sorunlar döndürülen yok.

md5 php MySQL farklı bir MD5 oluşturmak olabilir?

bir arkadaş tarafından yazılmış benzer bir kod aynı sunucuda çalıştı, ama fark nerede olduğunu görmek için çok deneyimi yok

can someone explain me where I'm wrong?
thanks!

5 Cevap

Ben mix & olmaz MD5 fonksiyonları maç. Muhtemelen basit herhangi bir md5 fonksiyonu tek yönlü bir sokak düşünün. Yani olması için değiştirin:

$str_concat = $str_a.$str_b;

// note "first_col" is "hello" and "second_col" is "world"
$sql = "UPDATE `my_table` SET `checked_col` = '1' WHERE
     MD5(CONCAT(first_col,second_col)) = MD5('$str_concat') LIMIT 1;";

Ya da sadece basitlik için, tam olarak sql maç yapmak.

// Skip the php concatenation.

// note "first_col" is "hello" and "second_col" is "world"
$sql = "UPDATE `my_table` SET `checked_col` = '1' WHERE 
    MD5(CONCAT(first_col,second_col)) = MD5(CONCAT('$str_a','$str_b')) LIMIT 1;";

MD5 in MySQL farklı karma döneceğini tek yolu, daha sonra in MD5 function PHP ise, {[(4) ]} {in [(1)]} farklıdır.

Aşağıdaki sorguyu çalıştırmayı deneyin:

SELECT  MD5(CONCAT(first_col,second_col))
FROM    mytable
WHERE   first_col = 'hello'
        AND second_col = 'world'

ve döner emin fc5e038d38a57032085441e7fe7010b0 yapmak

Ayrıca kontrol o MD5 PHP ve MySQL maçın tarafından döndürülen bir durum.

Bu güncellemek için hiçbir şey yoktur çünkü $ res yanlış olması muhtemeldir. Daha önce SQL komutunu çalıştırın ve satır güncellenmiş varsa checked_col hala 1 ise, tekrar güncelleme olmaz. Mysql_query şey güncellemek olmadığından, bu yanlış dönecektir.

Önceden teslim (doğrulanmış) satırları görmezden bir yerde madde içerebilir.

Muhtemelen doğrulama başarılı olup olmadığını belirlemek için güncelleme sonucu kullanmak istemiyorsanız, belki de bunun yerine bir select kullanmak istiyorum.

** Buldum tek çözüm şifresini giriniz (ya da tablosunu güncelleştirmek) çalıştığını veritabanına karma karşılaştırmak php fonksiyon kütüphanesi md5 hash kısmını, bu şekilde kullanarak etmektir. MySQL md5 fonksiyonu ile php bir md5 hash maç için tüm diğer girişimleri başarısız.

Bu durumda neden (PHP ve MySQL eski sürümleri bu sorun yok inanıyorum) herkes bilir, ben bilmek isterdim - teşekkürler, rick