好的我会尝试解释,(我是葡萄牙语lol)。
我有一个数据库,我 有失败的MySql:
数据库:广告 表:笔记本 字段: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);
?>
答案 0 :(得分:0)
$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进行新的开发。
答案 1 :(得分:0)
man ..使用distinct来解决问题http://www.w3schools.com/sql/sql_distinct.asp