【发布时间】:2020-12-26 14:42:05
【问题描述】:
我有一个名为 books 的 SQL 表,其中包含 Name, ID, Author, Language, Pages, Genres, and Status 列。现在,我想将此表的Name, ID, Author, and Status 列中的数据复制到另一个名为log 的表中,该表具有Name, ID, Author, Status and TimeStamp. 列。
我从我想通过 INSERT 语句发送的 PHP 代码中获取TimeStamp。
这是我一直在尝试的代码:
$queryBook = $_GET['ID'];
$currentDate = date('d-m-Y H:i:s');
$stmt4 = $conn -> prepare("INSERT INTO log (Name, ID, Author, Status) SELECT (Name, ID, Author, Status), ? FROM books WHERE ID = '$queryBook'");
$stmt4 -> bind_param('s', $currentDate);
$stmt4 -> execute();
我也试过这段代码:
$stmt4 = $conn -> prepare("INSERT INTO log * SELECT Name, ID, Author, Status FROM books WHERE ID = '$queryBook'");
$stmt4 -> execute();
我收到此错误:
Fatal error: Uncaught Error: Call to a member function execute() on boolean
【问题讨论】:
-
该查询中的随机
, ?是什么? -
我想添加
$currentDate的值,所以我使用?来绑定参数。 -
不要使用字符串插值或连接将值获取到 SQL 查询中。这很容易出错,并且可能使您的程序容易受到 SQL 注入攻击。使用参数化查询。见"How to include a PHP variable inside a MySQL statement" 和"How can I prevent SQL injection in PHP?"。
-
不要这样做:
$stmt4 = $conn -> prepare("INS...,这个$conn->prepare("INS...似乎更好 -
我没有看到日期列。您要在哪里添加日期?
d-m-Y H:i:s也不是 mysql 日期格式。