当前位置:首页 > 问答 > 正文

php怎么把现在时间直接存进数据库里,简单点教我咋写代码插入当前时间

在PHP里,我们先生成当前时间,然后通过一条SQL插入语句,把这个时间值放到语句里,最后执行这条语句,数据库里用来存时间的字段类型通常是DATETIME或者TIMESTAMP

第一步:在PHP里获取当前时间

PHP里有个非常方便的函数叫date(),它能按照你想要的格式输出当前日期和时间,存到数据库里,最好用标准的格式,年-月-日 时:分:秒”。

我们这样写: $current_time = date('Y-m-d H:i:s'); 这行代码的意思就是:

  • date()是那个获取时间的函数。
  • 括号里的'Y-m-d H:i:s'是告诉函数你要用什么格式。Y是四位数的年(比如2023),m是两位数的月(比如08),d是两位数的日(比如05),H是24小时制的小时,i是分,s是秒。
  • 把这个格式化的时间字符串赋值给一个叫$current_time的变量,后面我们就用它。

第二步:连接数据库

你要存时间,总得先连上数据库对吧,这里我们用PHP的MySQLi扩展来连接MySQL数据库作为例子,假设你的数据库信息如下:

  • 服务器地址:localhost
  • 用户名:root
  • 密码:123456
  • 数据库名:test_db

连接代码一般是这样的:

php怎么把现在时间直接存进数据库里,简单点教我咋写代码插入当前时间

$servername = "localhost";
$username = "root";
$password = "123456";
$dbname = "test_db";
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检查连接是否成功
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}

这段代码创建了一个数据库连接对象$conn,如果连接出错,die()函数会报错并停止脚本。

第三步:编写SQL插入语句并执行

现在假设你有一个表,名字叫my_table,里面有一个专门用来存时间的字段,字段名是create_time,它的类型是DATETIME

SQL插入语句就是这么写: $sql = "INSERT INTO my_table (create_time) VALUES ('$current_time')"; 这条SQL语句的意思就是:向my_table表的create_time字段里,插入一个值,这个值就是我们第一步准备好的变量$current_time

注意,因为$current_time是一个字符串变量,所以在SQL语句里要用单引号括起来。

我们用连接对象$conn来执行这条SQL语句:

php怎么把现在时间直接存进数据库里,简单点教我咋写代码插入当前时间

if ($conn->query($sql) === TRUE) {
    echo "新记录插入成功,时间是:" . $current_time;
} else {
    echo "错误: " . $sql . "<br>" . $conn->error;
}

$conn->query($sql)就是执行命令,如果返回TRUE,说明插入成功了,我们就打印一条成功信息;如果失败了,就把错误信息打印出来,方便你排查问题。

第四步:关闭数据库连接

好的习惯是做完数据库操作后把连接关掉。 $conn->close();

把全部代码组合起来

把上面的每一步拼在一起,就是一个完整的可以运行的PHP脚本了:

<?php
// 1. 获取当前时间
$current_time = date('Y-m-d H:i:s');
// 2. 数据库连接信息
$servername = "localhost";
$username = "root";
$password = "123456";
$dbname = "test_db";
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检查连接
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}
// 3. 构造并执行SQL语句
$sql = "INSERT INTO my_table (create_time) VALUES ('$current_time')";
if ($conn->query($sql) === TRUE) {
    echo "新记录插入成功,时间是:" . $current_time;
} else {
    echo "错误: " . $sql . "<br>" . $conn->error;
}
// 4. 关闭连接
$conn->close();
?>

非常重要的一点:关于SQL注入和安全性的简单说明

php怎么把现在时间直接存进数据库里,简单点教我咋写代码插入当前时间

上面写的代码为了让你看得明白,是最基础的写法,但它有一个安全隐患,叫做“SQL注入”,虽然我们这里插入的是PHP生成的时间,本身是安全的,但如果将来你是插入用户输入的内容(比如用户名、评论等),直接用变量拼接到SQL语句里就非常危险了,黑客可以构造恶意输入来破坏你的数据库。

更安全、更专业的做法是使用“预处理语句”,我在这里也给你写一下,你可以作为知识扩展,以后尽量用这种方法。

更安全的写法(使用MySQLi预处理语句):

<?php
$current_time = date('Y-m-d H:i:s');
$servername = "localhost";
$username = "root";
$password = "123456";
$dbname = "test_db";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}
// 注意这里的SQL语句,用问号`?`占位,代替了原来的变量
$sql = "INSERT INTO my_table (create_time) VALUES (?)";
// 准备SQL模板
$stmt = $conn->prepare($sql);
if ($stmt) {
    // 绑定参数。"s" 表示第一个问号对应的变量类型是字符串(string)
    $stmt->bind_param("s", $current_time);
    // 执行语句
    if ($stmt->execute()) {
        echo "新记录插入成功,时间是:" . $current_time;
    } else {
        echo "执行失败: " . $stmt->error;
    }
    // 关闭预处理语句
    $stmt->close();
} else {
    echo "预处理失败: " . $conn->error;
}
$conn->close();
?>

这个写法稍微复杂一点点,但好处是它将数据(时间)和SQL语句分开了,从根本上防止了SQL注入,是非常好的编程习惯。

最直接的方法就是:

  1. date('Y-m-d H:i:s')得到时间。
  2. 连上数据库。
  3. 写一个INSERT INTO 表名 (时间字段名) VALUES ('得到的时间变量')的SQL语句。
  4. 执行它。

你先把基础的用熟练,然后再去了解那个更安全的预处理语句的方法,希望这些代码能直接帮到你。