2014-08-28 116 views
0

我的要求是一次性加密密码并更新MySQL数据库。使用多维数组更新MySQL数据库

这是我试图做到这一点。但没有成功。

这是一个好方法吗?

PHP:

require_once("conn.php"); //PDO 
//I've set all passwords in an array 
$values = array ( 
    array ("studentID" => "SCI164" , "pass" => "ABCD12"), 
    array ("studentID" => "GEO24" , "pass" => "XYZ1"), 
    array ("studentID" => "SCI112" , "pass" => "PQR89") 
) 
foreach ($values as $temp) { 
    foreach($temp as $key => $val){ 
     $stuID = $key"studentID"; 
     $rawPass = $key"pass"; 
     $encPass = md5($rawPass); 

     $sql_update = "UPDATE students_db 
     set pass = $encPass 
     where studentID = $stuID Limit 1"; 
    } 
} 
+2

如果您已经在使用PDO,那么使用准备好的语句,不要浪费其良好的功能,如果您使用的是PHP 5.5,请使用['password hashing'](http://php.net) /manual/en/book.password.php),或者如果<5.5使用[向后兼容性](https://github.com/ircmaxell/password_compat)而不是 – Ghost 2014-08-28 06:55:03

+0

,您还应该阅读手册页上有关md5功能的说明http://php.net/md5 – mishu 2014-08-28 06:57:27

+1

..也许运行实际查询 – mishu 2014-08-28 06:58:36

回答

0

您不能使用。 EDITED $stuID = $key"studentID";这应该会给出错误。

foreach($values as $key=>$val) { 
     $sql_update = "UPDATE students_db 
     set pass ='". md5($val['pass'])."' 
     where studentID =". $val['studentID']."Limit 1"; 
     echo $sql_update; 
    } 

单引号因为MD5将返回像xvm456n334即字母数字的值。

+0

'foreach($ values as $ val){'给出一个错误'解析错误:语法错误,意外'foreach'(T_FOREACH)' – Nelie 2014-08-28 07:17:16

+0

我现在编辑试试。 – 2014-08-28 07:26:09

0

我不打算为任何安全问题与任何这一点,我不是在一个位置,然而讨论你的代码应该是这样的:

require_once("conn.php"); //PDO 
//I've set all passwords in an array 
$values = array ( 
    array ("studentID" => "SCI164" , "pass" => "ABCD12"), 
    array ("studentID" => "GEO24" , "pass" => "XYZ1"), 
    array ("studentID" => "SCI112" , "pass" => "PQR89") 
) 
foreach ($values as $val) { 
     $stuID = $val["studentID"]; 
     $rawPass = $val["pass"]; 
     $encPass = md5($rawPass); 

     $sql_update = "UPDATE students_db 
     set pass = $encPass 
     where studentID = $stuID Limit 1"; 
    } 
} 
0

尝试使用这个,你必须给single quotes大约$encPass作为通过列将有varchar数据类型。

foreach($values as $value) { 
    $stuID = $value["studentID"]; 
    $rawPass = $value['pass']; 
    $encPass = md5($rawPass); 

    $sql_update = "UPDATE students_db set pass = '$encPass' where studentID = $stuID Limit 1"; 
} 
+0

'foreach($ values as $ value){'给出一个错误'解析错误:语法错误,意外'foreach'(T_FOREACH)' – Nelie 2014-08-28 07:18:49

+0

尝试检查你的数组或用新代码更新你的问题。 – 2014-08-28 07:21:42

2

该查询从students_db加密所有通过值。

UPDATE students_db SET pass = MD5(pass) 
+0

非常好。 :)但是有一系列的加密发生。为了说明的目的,我只用了md5。 – Nelie 2014-08-28 07:22:21