Php 类似于在mysql中保存用户名字符串的时间戳的数据类型

Php 类似于在mysql中保存用户名字符串的时间戳的数据类型,php,mysql,Php,Mysql,是否存在类似于timestamp的数据类型,但其中的输入可以是任何字符串(例如username),仅当行中的另一列已更新时才会更新?这是mysql的。问题是我的表单已经动态生成了行,我需要为每一行保存时间戳和用户。在服务器端,我接收所有输入/行,无论它们是否已更改 这是处理表单数据的代码的一部分: if(!empty($_POST)) { $ids=$_POST['ids']; $glosas=$_POST['glosas']; $monedas=$_POST['mo

是否存在类似于timestamp的数据类型,但其中的输入可以是任何字符串(例如username),仅当行中的另一列已更新时才会更新?这是mysql的。问题是我的表单已经动态生成了行,我需要为每一行保存时间戳和用户。在服务器端,我接收所有输入/行,无论它们是否已更改

这是处理表单数据的代码的一部分:

if(!empty($_POST)) 
{ 
    $ids=$_POST['ids'];
    $glosas=$_POST['glosas'];
    $monedas=$_POST['monedas'];
    $montos=$_POST['montos'];
    $tipos=$_POST['tipos'];
    $estados=$_POST['estados'];
    $fechas=$_POST['fechas'];
    $codigos=$_POST['codigos'];

    for($i = 0; $i < count($ids); ++$i) {

    // Initial query parameter values 
    $query_params = array( 
        ':id_contrato' => $ids[$i],
        ':glosa' => $glosas[$i],
        ':moneda' => $monedas[$i],
        ':monto' => $montos[$i],
        ':tipo' => $tipos[$i],
        ':estado' => $estados[$i],
        ':fecha' => $fechas[$i],
        ':codigo_externo' => $codigos[$i],

    ); 


    $query = " 
        UPDATE contratos 
        SET 
        glosa = :glosa
        , moneda = :moneda 
        , monto = :monto
        , tipo = :tipo
        , estado = :estado
        , fecha = :fecha
        , codigo_externo = :codigo_externo  
    "; 

    $query .= " 
        WHERE 
            id_contrato = :id_contrato
        "; 

    try 
    { 
        // Execute the query 
        $stmt = $db->prepare($query); 
        $result = $stmt->execute($query_params); 
    } 
    catch(PDOException $ex) 
    { 

        die("No se pudo guardar: " . $ex->getMessage()); 
    } 

    }


    $elim_contratos=$_POST['elim_contratos'];
    //eliminar contratos checkeados
    if(!empty($elim_contratos)){
    foreach($elim_contratos as $elim_contrato)   {

    // Initial query parameter values 
    $query_params = array( 
        ':id_contrato' => $elim_contrato, 
    );

        $query="DELETE FROM contratos WHERE id_contrato = :id_contrato";

        try 
    { 
        // Execute the query 
        $stmt = $db->prepare($query); 
        $result = $stmt->execute($query_params); 
    } 
    catch(PDOException $ex) 
    { 

        die("No se pudo guardar: " . $ex->getMessage()); 
    } 

    }
    }
用户名保存在$\u会话变量中。

您可以拥有一个字段,该字段在行中的任何列每次更新/修改时更新:

创建表myTable(
时间戳\修改的时间戳
非空默认当前\u时间戳
在更新当前时间戳时,
名字varchar(50),
姓氏varchar(50)
等
)
timestamp\u modified
将默认保存创建时间。如果行被修改,则时间戳将相应地更新


更新。根据评论:


我需要的是“saved_by”列在 行中的另一列将被更新。用户名位于 $\u会话变量。我想一种方法是检查 在更新查询之前,数据库会相应地更改查询。我只是 想知道我是否可以通过这样做来避免额外的select查询 直接在数据库中

您可以使用跳过其他选择。如果未更新任何内容,
rowCount
将为0

$stmt=$db->prepare($query);
$result=$stmt->execute($query\u参数);
如果($stmt.rowCount()>0){
//使用$\u会话变量更新保存的\u by
}

能否提供处理表单数据的脚本示例?这可以通过多种方式实现,但取决于您的数据库后端和数据处理。我需要的是当行中的其他列之一更新时,“saved_by”列保存用户名。用户名位于$\u会话变量中。我认为一种方法是在更新查询之前检查数据库中的值,并相应地更改查询。我只是想知道是否可以通过直接在数据库中执行额外的select查询来避免。
--
-- Table structure for table `contratos`
--

CREATE TABLE IF NOT EXISTS `contratos` (
  `id_contrato` int(10) NOT NULL AUTO_INCREMENT,
  `glosa` varchar(140) NOT NULL,
  `moneda` varchar(10) NOT NULL DEFAULT 'UF',
  `monto` decimal(10,2) NOT NULL,
  `tipo` varchar(50) NOT NULL,
  `estado` varchar(10) NOT NULL,
  `fecha` date NOT NULL,
  `codigo_externo` varchar(50) NOT NULL DEFAULT 'Por Definir',
  `last_save` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `saved_by` varchar(50) NOT NULL,
  PRIMARY KEY (`id_contrato`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1015 ;