嗨我有一个小查询从一个mysql数据库中获取数据并将其插入到一个重复的表中,问题是我从数据库中获取相关数据很好,但我似乎无法将它带入新的数据库,我启用了错误报告,但我没有收到任何错误。
以下是我的代码:
$dbhost = "";
$dbuser = "";
$dbpass = "";
$dbname = "";
$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ("Error connecting to database");
mysql_select_db($dbname);
$result = mysql_query("SELECT * FROM ip_stats WHERE DATE(date) = CURDATE()")
or die(mysql_error());
// keeps getting the next row until there are no more to get
while($row = mysql_fetch_array( $result )) {
$id = $row['id'];
$date = $row['date'];
$ip = $row['ip'];
$hostname = $row['hostname'];
$company_name = $row['company_name'];
$address = $row['address'];
$descr = $row['descr'];
echo "$id - $date - $ip - $hostname - $company_name - $address - $descr";
?>
<br />
<?php
$query = "INSERT INTO `ip_stats11` (`id`, `ip`, `date`, `hostname`, `company_name`, `address`, `descr`, `updated`)
VALUES ('$id', '$ip', '$date', '$hostname', '$company_name', '$address', '$descr', 'yes')";
echo "updated $ip"; ?><br /><?php
}
答案 0 :(得分:0)
@klijn可能是您忘记执行INSERT
查询的。
但是,我建议这样做更简单,更快:
$result = mysql_query('
INSERT INTO `ip_stats11` (
`id`, `ip`, `date`, `hostname`, `company_name`, `address`, `descr`, `updated`
)
SELECT ip_stats.*, 'yes'
FROM ip_stats
WHERE DATE(date) = CURDATE()
');
另一件事 - 这个结构:
WHERE DATE(date) = CURDATE()
可能效率不高。您将函数应用于日期列。如果它是DATE
数据类型,则不需要它,您应该将其保留。如果它是DATETIME
并且你想截断时间部分,那么这样做将使mysql(以及大多数其他RDBMS-es)也无法使用该列上的任何索引。
这是一个更好的方法:
WHERE `date` BETWEEN CURRENT_DATE
AND CURRENT_DATE + INTERVAL 1 DAY - INTERVAL 1 SECOND
这样做的方式是CURRENT_DATE
将被投射到DATETIME(假设date
列是DATETIME
或TIMESTAMP
,并且它将具有零时间段,表示当天的开始和我们的BETWEEN ... AND范围的开始。在范围的结尾,我们说:请明天使用:
CURRENT_DATE + INTERVAL 1 DAY
实际上,这是比current_date晚1天的第一秒。这不完全正确,因为BETWEEN...AND...
使用包含范围边界,因此我们使用- MINUS 1 SECOND
减去一秒,以确保我们获得CURRENT_DATE指示的当天的最后一秒。