You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PHP的MySQL条件插入语句中传递日期变量?

给SQL插入语句添加日期变量的实现方法

嘿,这事儿其实很容易搞定,咱们直接修改你的INSERT语句结构就行,同时还要提醒你注意代码的安全问题哦~

直接修改原代码的方案

你只需要在INSERT的字段列表里加上date,然后在SELECT对应的位置传入$date变量就可以了,注意日期是字符串类型,要给变量套上单引号:

$date = date("Y-m-d");
$query = " INSERT INTO article_likes (user, article, date) 
           SELECT {$_SESSION['user_id']}, {$id}, '{$date}' 
           FROM users 
           WHERE EXISTS( SELECT uid FROM users WHERE uid = {$id}) 
             AND NOT EXISTS( SELECT id FROM article_likes WHERE user = {$_SESSION['user_id']} AND article = {$id}) 
           LIMIT 1 ";

简单解释下改动点:

  • 在article_likes后的括号里新增date字段,对应表中的date列;
  • 在SELECT的返回值里新增'{$date}',用单引号包裹确保日期字符串能被SQL正确识别。

重要提醒:避免SQL注入风险

你现在的代码是直接把变量拼进SQL语句里,这存在严重的SQL注入漏洞,攻击者可以通过构造恶意参数篡改你的SQL逻辑,甚至窃取/破坏数据库数据。生产环境一定要用预处理语句来处理,下面给你两个常用的实现示例:

PDO预处理方案

$date = date("Y-m-d");
$userId = $_SESSION['user_id'];

// 用占位符?代替直接拼接变量
$query = " INSERT INTO article_likes (user, article, date) 
           SELECT ?, ?, ? 
           FROM users 
           WHERE EXISTS( SELECT uid FROM users WHERE uid = ?) 
             AND NOT EXISTS( SELECT id FROM article_likes WHERE user = ? AND article = ?) 
           LIMIT 1 ";

$stmt = $pdo->prepare($query);
// 按顺序传入参数,自动处理类型转义和引号
$stmt->execute([$userId, $id, $date, $id, $userId, $id]);

MySQLi预处理方案

$date = date("Y-m-d");
$userId = $_SESSION['user_id'];

$query = " INSERT INTO article_likes (user, article, date) 
           SELECT ?, ?, ? 
           FROM users 
           WHERE EXISTS( SELECT uid FROM users WHERE uid = ?) 
             AND NOT EXISTS( SELECT id FROM article_likes WHERE user = ? AND article = ?) 
           LIMIT 1 ";

$stmt = $mysqli->prepare($query);
// 绑定参数,"ssssss"表示6个字符串类型的参数,顺序要和占位符对应
$stmt->bind_param("ssssss", $userId, $id, $date, $id, $userId, $id);
$stmt->execute();

预处理语句会把SQL的结构和数据完全分开,从根源上杜绝注入风险,这是开发中必须遵守的安全规范哦~

内容的提问来源于stack exchange,提问作者Rajput Princy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:11:53