Php 动态插入数据库时如何插入时间和日期

Php 动态插入数据库时如何插入时间和日期,php,arrays,oop,pdo,Php,Arrays,Oop,Pdo,下面的函数是我编写的使用PDO将表单数据动态插入db的函数,它获取表单名称和值attr以填充PDO insert语句中的cols和bindValues。我现在的问题是: 我想在插入前对密码进行哈希运算,同时插入时间和日期 public function reg_user($data) { if($_SERVER['REQUEST_METHOD'] == 'POST'){ $dataDB = array();

下面的函数是我编写的使用PDO将表单数据动态插入db的函数,它获取表单名称和值attr以填充PDO insert语句中的cols和bindValues。我现在的问题是:

我想在插入前对密码进行哈希运算,同时插入时间和日期

 public function reg_user($data) {
            if($_SERVER['REQUEST_METHOD'] == 'POST'){
                $dataDB = array();
                foreach ($_POST as $k => $v) {
                  if (in_array($k,$this->valid_keys)) {
                     $dataDB[$k] = $v;
                  }
                }
        $this->cols    =  '`'.implode('`, `', array_keys($dataDB)).'`' ;
        $this->values  = ':' . implode(", :", array_keys($dataDB));
        $db = new  db;
              try{
                    $stmt = $db->dbh->prepare ("INSERT INTO $this->table ($this->cols ) VALUES ($this->values)");
                    foreach ($dataDB as $k => $v) {
                          $stmt -> bindValue(':'.$k, $v);
                 }
    $stmt->execute();
} catch (PDOException $e) {
    $error = new Errors();
    echo "<b>".$error->displayError($e)."</b>";
}

}
}

但我仍然会将普通密码插入数据库。

在循环中检查密钥是否为密码,然后像下面那样散列它

foreach ($_POST as $k => $v) {

    if (in_array($k,$this->valid_keys)) {
     $dataDB[$k] = ($k=="password")?md5($v):$v;
    }
}
//here add the date to the array like below

$dataDB["datetime"]=date('d-m-y H:i:s');

或者将datetime列设置为表中的
timestamp
(然后它会自动在该行上添加日期和时间)

在循环中检查键是否为password,然后按如下方式散列它

foreach ($_POST as $k => $v) {

    if (in_array($k,$this->valid_keys)) {
     $dataDB[$k] = ($k=="password")?md5($v):$v;
    }
}
//here add the date to the array like below

$dataDB["datetime"]=date('d-m-y H:i:s');

或者将datetime列设置为表中的
timestamp
(然后它会自动在该行上添加日期和时间)

在循环中检查键是否为password,然后按如下方式散列它

foreach ($_POST as $k => $v) {

    if (in_array($k,$this->valid_keys)) {
     $dataDB[$k] = ($k=="password")?md5($v):$v;
    }
}
//here add the date to the array like below

$dataDB["datetime"]=date('d-m-y H:i:s');

或者将datetime列设置为表中的
timestamp
(然后它会自动在该行上添加日期和时间)

在循环中检查键是否为password,然后按如下方式散列它

foreach ($_POST as $k => $v) {

    if (in_array($k,$this->valid_keys)) {
     $dataDB[$k] = ($k=="password")?md5($v):$v;
    }
}
//here add the date to the array like below

$dataDB["datetime"]=date('d-m-y H:i:s');

或者将datetime列设置为表中的
时间戳
(然后它会自动在该行添加日期和时间)

这是Mysql吗?如果是这样的话,有几种不做基于代码的事情的方法:

在密码散列方面,在循环中,侦听密码的密钥创建一个特殊情况,将insert值设置为散列值。您可以创建一个通用的“clean”方法,也可以传递所有值-至少这个“clean”函数可以为恶意注入代码转义所有插入数据,并且它还可以执行任何特殊情况转换,而不会扰乱您显示的插入方法:

>  foreach ($_POST as $k => $v) {
>                   if (in_array($k,$this->valid_keys)) {
>                      $dataDB[$k] = clean($k, $v);
>                   }
>                 }
clean可能看起来像:

function clean($key, $val){
  if($key=="password")
  {
    $val = //hash pword here
  }
   return addslashes($val); //using addslashes as basic example
}
我发誓,我以前写的代码看起来和你的几乎一样。这是一个相当好的方法。每个密钥都会遇到特殊情况,例如密码问题,因此自动处理日期之类的内容会很有帮助

或者,您可以在插入每条记录时使用Now()。它有点不那么优雅,与这些ORM-ish插件不太兼容


如果不是Mysql,其他数据库也有类似的方法,postgres的示例与w3schools方法非常相似。

这是Mysql吗?如果是这样的话,有几种不做基于代码的事情的方法:

在密码散列方面,在循环中,侦听密码的密钥创建一个特殊情况,将insert值设置为散列值。您可以创建一个通用的“clean”方法,也可以传递所有值-至少这个“clean”函数可以为恶意注入代码转义所有插入数据,并且它还可以执行任何特殊情况转换,而不会扰乱您显示的插入方法:

>  foreach ($_POST as $k => $v) {
>                   if (in_array($k,$this->valid_keys)) {
>                      $dataDB[$k] = clean($k, $v);
>                   }
>                 }
clean可能看起来像:

function clean($key, $val){
  if($key=="password")
  {
    $val = //hash pword here
  }
   return addslashes($val); //using addslashes as basic example
}
我发誓,我以前写的代码看起来和你的几乎一样。这是一个相当好的方法。每个密钥都会遇到特殊情况,例如密码问题,因此自动处理日期之类的内容会很有帮助

或者,您可以在插入每条记录时使用Now()。它有点不那么优雅,与这些ORM-ish插件不太兼容


如果不是Mysql,其他数据库也有类似的方法,postgres的示例与w3schools方法非常相似。

这是Mysql吗?如果是这样的话,有几种不做基于代码的事情的方法:

在密码散列方面,在循环中,侦听密码的密钥创建一个特殊情况,将insert值设置为散列值。您可以创建一个通用的“clean”方法,也可以传递所有值-至少这个“clean”函数可以为恶意注入代码转义所有插入数据,并且它还可以执行任何特殊情况转换,而不会扰乱您显示的插入方法:

>  foreach ($_POST as $k => $v) {
>                   if (in_array($k,$this->valid_keys)) {
>                      $dataDB[$k] = clean($k, $v);
>                   }
>                 }
clean可能看起来像:

function clean($key, $val){
  if($key=="password")
  {
    $val = //hash pword here
  }
   return addslashes($val); //using addslashes as basic example
}
我发誓,我以前写的代码看起来和你的几乎一样。这是一个相当好的方法。每个密钥都会遇到特殊情况,例如密码问题,因此自动处理日期之类的内容会很有帮助

或者,您可以在插入每条记录时使用Now()。它有点不那么优雅,与这些ORM-ish插件不太兼容


如果不是Mysql,其他数据库也有类似的方法,postgres的示例与w3schools方法非常相似。

这是Mysql吗?如果是这样的话,有几种不做基于代码的事情的方法:

在密码散列方面,在循环中,侦听密码的密钥创建一个特殊情况,将insert值设置为散列值。您可以创建一个通用的“clean”方法,也可以传递所有值-至少这个“clean”函数可以为恶意注入代码转义所有插入数据,并且它还可以执行任何特殊情况转换,而不会扰乱您显示的插入方法:

>  foreach ($_POST as $k => $v) {
>                   if (in_array($k,$this->valid_keys)) {
>                      $dataDB[$k] = clean($k, $v);
>                   }
>                 }
clean可能看起来像:

function clean($key, $val){
  if($key=="password")
  {
    $val = //hash pword here
  }
   return addslashes($val); //using addslashes as basic example
}
我发誓,我以前写的代码看起来和你的几乎一样。这是一个相当好的方法。每个密钥都会遇到特殊情况,例如密码问题,因此自动处理日期之类的内容会很有帮助

或者,您可以在插入每条记录时使用Now()。它有点不那么优雅,与这些ORM-ish插件不太兼容

如果其他数据库没有类似的方法,postgres的示例与w3schools方法非常相似