php/mysql : get data from one table, 转换并插入另一个表

标签 php mysql sql sql-server ldap

好吧,我会尽力解释一下,(我是葡萄牙人哈哈)。

我有一个数据库,其中有以下 MySQL:

数据库:广告
table :笔记本
字段:ID、标签、so、laSTLogon、laSTLogh

我的 ldap 查询从 ldap 服务器(事件目录)获取数据并将其存储在我的 MySQL 数据库(广告/笔记本)中。 我得到的标签是标签号是唯一的。 我知道笔记本上安装的是哪个操作系统。 我得到laSTLogh,这是最后登录时间戳,它也是唯一的。 ID字段是自动递增和关键的,但我可以将标签字段设置为关键。

我有一个 config_notebooks.php,我在其中设置了连接 ldap 和 MySQL 服务器的所有变量。

<?php
/*------------------------------------------------------------------------*/
//setting your variables
/*------------------------------------------------------------------------*/
//ldap host
$host = "ldap://HEICPT1VIA01.HEIWAY.NET";
//ldap user
$user = "domain\user";
//ldap password
$pswd = "pssw";
//ldap base structure
$dn = "OU=NotebookM2,OU=WorkstationsM2,OU=PT1,DC=heiway,DC=net";;
//attributs to search and get
$attrs = array("cn","operatingsystem","lastlogon");
//sql host
$sqlhost="localhost"; 
//sql user
$sqluser="root";
//sql password
$sqlpswd="";
//sql database
$database="ad";
//sql table
$table="notebooks";
?>

现在是查询脚本

<?php
/*------------------------------------------------------------------------*/
//Query script
/*------------------------------------------------------------------------*/
include 'config_notebooks.php';
$filter = $_POST['filter']."=".$_POST['keyword']."*";
//connect to db
$con = mysql_connect("$sqlhost","$sqluser",""); 
if (!$con) 
{ 
die('Could not connect: ' . mysql_error()); 
} 

//connect to active directory
$ad = ldap_connect($host)
  or die( "Could not connect!" );
  
  // Set version number
ldap_set_option($ad, LDAP_OPT_PROTOCOL_VERSION, 3)
 or die ("Could not set ldap protocol");
  
  // Binding to ldap server
$bd = ldap_bind($ad, $user, $pswd)
  or die ("Could not bind");

$search = ldap_search($ad, $dn, $filter, $attrs)
      or die ("ldap search failed");

$entries = ldap_get_entries($ad, $search);
$sel = mysql_select_db("ad", $con); 
if (!$sel) 
{ 
die('Could not select DB: ' . mysql_error()); 
} 

for ($i=0; $i<$entries["count"]; $i++) 
{ 

$tag = $entries[$i]["cn"][0]; 
$so = $entries[$i]["operatingsystem"][0]; 
$lastl = $entries[$i]["lastlogon"][0];

     
        mysql_query("
        INSERT INTO 
            $table (tag, so, lastlogh)
        VALUES 
            ('$tag', '$so', '$lastl')
            ON DUPLICATE KEY UPDATE         
        tag='$tag',
        so='$so',
        lastlogon='$lastl'
        ");

} 
mysql_close($con); 
ldap_unbind($ad);
if ($entries["count"] > 0)
header("Location: notebooks_list.php")
?>

在此查询中,上次登录时间戳的编码类似于 130276262860634000

所以我可以将所有内容导出到 Excel 并对其进行解码,但我找到了一个可以执行此操作的代码,因此可以节省时间。 我在数据库中创建了一个新字段(laSTLogon),我需要从laSTLogh字段中获取数据,使用新脚本进行解码并将其存储在laSTLogon字段中。

这是我找到的脚本:

<?php
function adConvert ($ad) {
  $seconds_ad = $ad / (10000000);
   //86400 -- seconds in 1 day
   $unix = ((1970-1601) * 365 - 3 + round((1970-1601)/4) ) * 86400;

   $timestamp = $seconds_ad - $unix; 
   $normalDate = date("F d, Y", $timestamp);

      return $normalDate;
}

//example: echo adConvert($ad);
?>

最佳答案

使用Mysql API

$res = mysql_query("SELECT * FROM $table");
while($row = mysql_fetch_assoc($res)) {
  $logon_ts = adConvert($row['lastlogh']);
  mysql_query("UPDATE $table SET lastlogon = '$logon_ts' WHERE tag='$row[tag]'");
}

希望这能解决您的问题。

注意:自 PHP 5.5.0 起,Mysql API 已弃用。因此,强烈建议使用 Mysqli API 进行新的开发。

关于php/mysql : get data from one table, 转换并插入另一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19774010/

相关文章:

php - 为什么这个多维数组不能正确显示?

php - 通过php将excel时间字段导入mysql

php - 根据另一个表按值之和对表数据进行排序

sql - 寻找练习来学习 SQL,使用 Northwind 数据库

mysql - 按位分组并选择不同值时 MyISAM 出现意外结果

sql - 如何在 Oracle 11g 中获取两个日期之间的天数?

php - 搜索数组中的多个值

php - msmtp 1.8.22 通过 php 发送时从地址覆盖

php - 如何在使用 fputcsv 时跳过数据库中的某些字段

java - 如何使用 EJB 实体 bean 连接到 mysql 数据库?