php - 创建日志表以注册记录 MySql PHP
问题描述
我正在尝试log
为我的数据库创建一个表来记录发生的所有操作,并且我正在考虑为每个表创建一个日志表,以便能够轻松读取信息。
但我不知道该怎么做,因为我希望将log
表格输入到一个变量,我将在该变量中格式化文本并将其他变量用于注册输入。
例如:$log = '[' . $data_log . '] ' . ' The item '. $ativo .' with the S/N '. $numero_serie .' was delivered to the employee '. $id_colaborador);
对于我拥有的数据库,我知道这是错误的,但我不知道为什么..
if ($valid) {
$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$acao_log2 = '[' . $data_log . '] ' . ' O ativo '. $ativo .' com o S/N '. $numero_serie .' foi entregue ao colaborador '. $id_colaborador . ' [' . $user . ']' ;
$sql = "INSERT INTO ativos (ativo,comentario,data_aquisicao,localizacao,fabricante,modelo,imei,
numero_serie,ativo_sap,evento,data_evento,id_colaborador)
SELECT ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, id_colaborador
FROM colaboradores
WHERE nome = ?";
$log = "INSERT INTO log_ativos (acao_log, data_log, id_ativo)
VALUES (". $acao_log2 . "," . $data_log . ", id_ativo = id_ativo WHERE id_ativo = ?";
$q = $pdo->prepare($sql);
$qlog = $pdo->prepare($log);
$q->execute(array($ativo,$comentario,$data_aquisicao,$localizacao,$fabricante,$modelo,$imei,$numero_serie,$ativo_sap,$evento,$data_evento,$id_colaborador));
$qlog->execute(array($acao_log,$data_log,$id_ativo));
Database::disconnect();
问题是,我不希望用户为日志输入任何内容,它应该是自动的:/
致命错误:未捕获的 PDOException:SQLSTATE[HY093]:无效参数编号:绑定变量的数量与 C:\xampp\htdocs\gestao\Ativos\create.php:129 中的标记数量不匹配堆栈跟踪:#0 C:\ xampp\htdocs\gestao\Ativos\create.php(129): PDOStatement->execute(Array) #1 {main} 在第 129 行的 C:\xampp\htdocs\gestao\Ativos\create.php 中抛出
解决方案
您的查询在很多层面上都是错误的。
SELECT ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, id_colaborador
这个真正错误的表和列名称不能被 PDO 中的参数替换。您的插入查询也是错误的:
$log = "INSERT INTO log_ativos (acao_log, data_log, id_ativo) VALUES (". $acao_log2 . "," . $data_log . ", id_ativo = id_ativo WHERE id_ativo = ?";
上面的查询非常错误.. INSERT 不支持 where 子句,而是您正在查看更新。
这可能是您正在寻找的。
<?php
if ($valid) {
$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$acao_log2 = '[' . $data_log . '] ' . ' O ativo ' . $ativo . ' com o S/N ' . $numero_serie . ' foi entregue ao colaborador ' . $id_colaborador . ' [' . $user . ']';
$sql = "INSERT INTO ativos (ativo,comentario,data_aquisicao,localizacao,fabricante,modelo,imei,
numero_serie,ativo_sap,evento,data_evento,id_colaborador)
SELECT column1,column2,column3,column4,column5,column6,column7,column8,column9,column10,column11, id_colaborador
FROM colaboradores
WHERE nome = ?";
$q = $pdo->prepare($sql);
$q->execute(array($nomeVariable));
$log = "UPDATE log_ativos SET acao_log = ? , data_log = ? WHERE id_ativo = ? ";
$qlog = $pdo->prepare($log);
$qlog->execute(array($id_ativo));
}
?>
花点时间做sql查询教程,和php手册和sql手册做朋友
更新
根据您在下面的评论,
我想根据第一个查询将生成的 id_ativo 为该表创建一个新的日志记录,
那么当插入的第一个语句成功获取最后一个插入 id时您需要做什么,该插入 id是在下一个插入中生成并使用的。
这是如何:
<?php
if ($valid) {
$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$acao_log2 = '[' . $data_log . '] ' . ' O ativo ' . $ativo . ' com o S/N ' . $numero_serie . ' foi entregue ao colaborador ' . $id_colaborador . ' [' . $user . ']';
$sql = "INSERT INTO ativos (ativo,comentario,data_aquisicao,localizacao,fabricante,modelo,imei,
numero_serie,ativo_sap,evento,data_evento,id_colaborador)
SELECT column1,column2,column3,column4,column5,column6,column7,column8,column9,column10,column11, id_colaborador
FROM colaboradores
WHERE nome = ?";
$q = $pdo->prepare($sql);
$q->execute(array($nomeVariable));
if ($q) {
//get last ID that was generated by previos insert
$id_ativo = $pdo->lastInsertId();
}
$log = "INSERT INTO log_ativos (acao_log,data_log,id_ativo) VALUES(?,?,?)";
$qlog = $pdo->prepare($log);
$qlog->execute(array($acao_log2,$data_log,$id_ativo));
}
?>
推荐阅读
- r - 如何从数据集中获取条形图?
- spring - 使用内部国际化元素
- python - 黑客新闻 API, KeyError: 'title
- node.js - 本地客户端服务器节点安全认证
- asp.net - 在 POST JSON 中仅接受模型中的类型
- javascript - 如何使用一些 js 库创建 webpack 应用程序,但不将其包含在 pack 中但使用其 CDN?
- python - 将参数传递给线程python
- dygraphs - 如何在 dygraphs [r] 中绘制烛台 + 滚轮
- html - 如何在移动设备上使用 css 使图像居中?
- c# - WPF DataGrid子级垂直滚动