【问题标题】:Update MySQL database using an multidimensional array使用多维数组更新 MySQL 数据库
【发布时间】:2014-10-21 22:37:31
【问题描述】:

我的要求是加密密码并一次性更新 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";
    }
}

【问题讨论】:

  • 如果你已经在使用 PDO,那么使用准备好的语句,不要浪费它的好功能,如果你使用 PHP 5.5 使用 password hashing 或者如果 backward compatibility而是
  • 您还应该阅读 md5 函数手册页上的注释php.net/md5
  • .. 并且可能运行实际查询
  • @Ghost:谢谢。这是为了更新一个已经在使用并且有自己的加密系列的数据库。我在这里使用 md5 进行说明。
  • 如果您要问什么是好方法,请使用准备好的语句。这里是tutorial

标签: php mysql pdo multidimensional-array mysqli


【解决方案1】:

您不能使用 .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 的值,即字母数字。

【讨论】:

  • foreach ($values as $val) { 给出错误Parse error: syntax error, unexpected 'foreach' (T_FOREACH)
【解决方案2】:

此查询加密来自students_db 的所有传递值。

UPDATE students_db SET pass = MD5(pass)

【讨论】:

  • 非常好。 :) 但是发生了一系列加密。我在这里只使用了 md5 来进行说明。
【解决方案3】:

尝试使用它,您必须在 $encPass 周围给出 single quotes,因为 pass 列将具有 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";
}

【讨论】:

  • foreach($values as $value) { 给出错误Parse error: syntax error, unexpected 'foreach' (T_FOREACH)
  • 尝试检查您的数组或使用新代码更新您的问题。
【解决方案4】:

我不会涉及任何安全问题,我无法讨论它,但是您的代码应该是这样的:

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";
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    • 2014-04-04
    • 1970-01-01
    • 2022-12-21
    • 2011-12-06
    • 2011-11-09
    相关资源
    最近更新 更多