我如何使用 mysqli SELECT 和 DELETE 和 RETURN 基于 WHERE 条件的单行
How can I use mysqli to SELECT and both DELETE and RETURN a single row based on WHERE condition
如何执行 mysqli php 查询以便 SELECT 请求 RETURNS 行并删除 MySQL 中的同一行DB?
这个 php 脚本可以很好地查询和 return 基于最大数字邮政编码的单行(示例),但我的修改没有完成删除行:
<?php
echo phpversion();
// Create connection
$con = mysqli_connect("localhost", "mysqluser", "mysqlpass", "mysqldb");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
// Select all from designated assigned bot
$sql = "SELECT * FROM mysqltable WHERE zipsize=( SELECT max(zipsize) FROM mysqltable ) LIMIT 1;";
// Confirm there are results
if ($result = mysqli_query($con, $sql)) {
// We have results, create an array to hold the results
// and an array to hold the data
$resultArray = array();
$tempArray = array();
// Loop through each result
while ($row = $result->fetch_object()) {
// Add each result into the results array
$tempArray = $row;
array_push($resultArray, $tempArray);
}
// Encode the array to JSON and output the results
echo json_encode($resultArray);
}
// Close connections
mysqli_close($con);
?>
我尝试在不同的地方添加这一行以使用 Id 删除该行但没有成功,这是 table 中每一行的唯一代码(也尝试使用 $result 和 $resultArray 而不是 $行):
$delsql= mysqli_query($conn,"DELETE FROM mysqltable WHERE Id= $row['Id']");
如果您想 select 数据然后立即删除 select 编辑的数据,那么您需要 运行 两个单独的查询。我真的不知道为什么你有这么多不必要的代码,但我会这样做:
<?php
// Create connection
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$con = new mysqli("localhost", "mysqluser", "mysqlpass", "mysqldb");
$mysqli->set_charset('utf8mb4'); // always set the charset
// Select all from designated assigned bot
$sql = 'SELECT * FROM mysqltable WHERE zipsize=( SELECT max(zipsize) FROM mysqltable ) LIMIT 1';
$resultArray = $con->query($sql)->fetch_all(MYSQLI_ASSOC);
echo json_encode($resultArray);
// now delete
$sql = 'DELETE FROM mysqltable WHERE zipsize=( SELECT max(zipsize) FROM mysqltable ) LIMIT 1';
$resultArray = $con->query($sql);
如果您不需要嵌套数组并且只获取一行,那么您可以将 fetch_all(MYSQLI_ASSOC)
替换为 fetch_assoc()
。
小心! 这些查询可能会产生意外结果,因为除非您指定 ORDER BY
,否则可能 select 与您删除的行不同.
如果您在 table 中有一个 primary/unique 键来唯一标识您所在的行 selecting/deleting 那么您可以存储 ID 列表,然后执行 WHERE IN()
查询。
例如:
// Select all from designated assigned bot
$sql = 'SELECT * FROM mysqltable WHERE zipsize=( SELECT max(zipsize) FROM mysqltable )';
$resultArray = $con->query($sql)->fetch_all(MYSQLI_ASSOC);
echo json_encode($resultArray);
// get all ids from our array
$ids = array_column($resultArray, 'Id');
// now delete
$sql = 'DELETE FROM mysqltable WHERE Id IN('.str_repeat('?,', count($ids) - 1) . '?)';
$stmt = $con->prepare($sql);
$stmt->bind_param(str_repeat('s', count($ids)), ...$ids);
$stmt->execute();
如何执行 mysqli php 查询以便 SELECT 请求 RETURNS 行并删除 MySQL 中的同一行DB?
这个 php 脚本可以很好地查询和 return 基于最大数字邮政编码的单行(示例),但我的修改没有完成删除行:
<?php
echo phpversion();
// Create connection
$con = mysqli_connect("localhost", "mysqluser", "mysqlpass", "mysqldb");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
// Select all from designated assigned bot
$sql = "SELECT * FROM mysqltable WHERE zipsize=( SELECT max(zipsize) FROM mysqltable ) LIMIT 1;";
// Confirm there are results
if ($result = mysqli_query($con, $sql)) {
// We have results, create an array to hold the results
// and an array to hold the data
$resultArray = array();
$tempArray = array();
// Loop through each result
while ($row = $result->fetch_object()) {
// Add each result into the results array
$tempArray = $row;
array_push($resultArray, $tempArray);
}
// Encode the array to JSON and output the results
echo json_encode($resultArray);
}
// Close connections
mysqli_close($con);
?>
我尝试在不同的地方添加这一行以使用 Id 删除该行但没有成功,这是 table 中每一行的唯一代码(也尝试使用 $result 和 $resultArray 而不是 $行):
$delsql= mysqli_query($conn,"DELETE FROM mysqltable WHERE Id= $row['Id']");
如果您想 select 数据然后立即删除 select 编辑的数据,那么您需要 运行 两个单独的查询。我真的不知道为什么你有这么多不必要的代码,但我会这样做:
<?php
// Create connection
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$con = new mysqli("localhost", "mysqluser", "mysqlpass", "mysqldb");
$mysqli->set_charset('utf8mb4'); // always set the charset
// Select all from designated assigned bot
$sql = 'SELECT * FROM mysqltable WHERE zipsize=( SELECT max(zipsize) FROM mysqltable ) LIMIT 1';
$resultArray = $con->query($sql)->fetch_all(MYSQLI_ASSOC);
echo json_encode($resultArray);
// now delete
$sql = 'DELETE FROM mysqltable WHERE zipsize=( SELECT max(zipsize) FROM mysqltable ) LIMIT 1';
$resultArray = $con->query($sql);
如果您不需要嵌套数组并且只获取一行,那么您可以将 fetch_all(MYSQLI_ASSOC)
替换为 fetch_assoc()
。
小心! 这些查询可能会产生意外结果,因为除非您指定 ORDER BY
,否则可能 select 与您删除的行不同.
如果您在 table 中有一个 primary/unique 键来唯一标识您所在的行 selecting/deleting 那么您可以存储 ID 列表,然后执行 WHERE IN()
查询。
例如:
// Select all from designated assigned bot
$sql = 'SELECT * FROM mysqltable WHERE zipsize=( SELECT max(zipsize) FROM mysqltable )';
$resultArray = $con->query($sql)->fetch_all(MYSQLI_ASSOC);
echo json_encode($resultArray);
// get all ids from our array
$ids = array_column($resultArray, 'Id');
// now delete
$sql = 'DELETE FROM mysqltable WHERE Id IN('.str_repeat('?,', count($ids) - 1) . '?)';
$stmt = $con->prepare($sql);
$stmt->bind_param(str_repeat('s', count($ids)), ...$ids);
$stmt->execute();