【发布时间】:2018-10-03 09:33:51
【问题描述】:
是否可以更新数据库,然后立即获取一个新记录集,然后输入所有这些新数据?在执行包含所有新记录的新 SELECT 之前,我是否需要某种闭包来确保插入 sql 已完成?
也就是说,简单地说,如果我总共有 50 000 个条目,结构如下:
$sql = "INSERT INTO `acc_change`(`ID`, `type`, `name`, `amount`, `date`, `processed`)
VALUES (NULL, 'auto', 'Lorem', '75.00', '2018-04-05 00:00:00', 'no'),
(NULL, 'auto', 'Ipsum', '12.00', '2018-04-25 00:00:00', 'no'),(NULL, 'auto', 'Dolor', '24.00', '2018-04-28 00:00:00', 'no')...
INSERT INTO `videos`(`ID`, `type`, `name`, `date`, `processed`)
VALUES (NULL, 'auto', 'Lorem', '2018-04-05 00:00:00', 'no')...
然后我可以做这样的事情吗:
$update_sql = "SELECT * FROM `acc_change` where `date` < '2018-04-23 12:32:00'"
$sqlMsg = enterSql($update_sql);
并获取所有最近添加的记录?
重要提示: 通常我会:
从数据库中提取旧数据并保存在数组/对象中
拉取新数据并保存在数组/对象中。
过滤掉我需要的东西并创建新的数组/对象。
创建新的插入 SQL 语句。
我完全清楚这是解决问题的方法,但这不是我要问的。我在问您是否/如何插入/更新,然后立即访问这些新数据。
我的数据库功能:
function db($action){
static $conn;
$servername = "localhost";
$dbuser = "root";
$dbpass = "";
$dbname = "life2020";
if ($action == "use"){
if ($conn === null){
$conn = mysqli_connect($servername, $dbuser, $dbpass, $dbname);
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
}
return $conn;
} else {
mysqli_close($conn);
}
}
function get_db_rows($sql){
$rows = array();
$conn = db("use");
$result = mysqli_query($conn, $sql) or die("Erro!: " . mysqli_error($conn));
if (mysqli_num_rows($result) > 0) {
while($row = mysqli_fetch_assoc($result)) {
$rows[] = $row;
}
}
mysqli_free_result($result);
return $rows;
}
function enterSql($sql){
$sqlMsg = "";
$conn = db("use");
if (mysqli_multi_query($conn, $sql)) {
$sqlMsg = "Entered data";
} else {
$sqlMsg = "Error updating record: " . mysqli_error($conn);
}
mysqli_close($conn);
return $sqlMsg;
}
【问题讨论】:
-
I am asking if/how you can insert/update and then access that new data right away.好吧,insert_id 将返回0或The value of the AUTO_INCREMENT field that was updated by the previous query。但是,这仅适用于INSERT查询。如果您想运行数字检查(if(enterSql($sql) > 0)) -
哦,好吧 - 所以我可以在循环中检查 insert_id ,如果还没有完成,然后 sleep() ?我喜欢它。
-
你会如何处理更新?
-
根本不需要
sleep(),因为mysqli_query将挂起,直到它执行完查询。要处理UPDATE,您可能应该传递您在查询中用作唯一标识符的ID -
是的,我喜欢 mysqli_query 的这一点——但我正在使用的 mysqli_multi_query 似乎没有做到这一点。