2014-08-28 2 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

+0

, вы также должны прочитать примечание на странице руководства для функции md5 http://php.net/md5 – mishu

+1

.. и, возможно, запустить фактический запрос – mishu

ответ

0

Вы не можете использовать. EDITED Это должно привести к ошибке.

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

+0

Я сейчас редактировал try. –

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

+0

try проверить свой массив или обновить свой вопрос с помощью нового кода. –

2

Этот запрос шифрует все значения прохода от students_db.

UPDATE students_db SET pass = MD5(pass) 
+0

Очень приятно. :) Но есть серия шифрования. Я использовал только md5 здесь для иллюстративной цели. – Nelie