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