考虑一个包含一些行的表。 通过php,我创建了一个SQL查询,例如" DELETE *来自my_table"。 如何在运行sql查询之前识别受影响的行。换句话说,我想在sql查询之后和运行之前获得受影响的行列表。
总而言之,我想在运行SQL不可逆查询之前检查一些事情。
最好的方面。
答案 0 :(得分:4)
您可以使用与SELECT
使用的JOIN
和WHERE
条件相同的DELETE
和DELETE
条件执行SELECT
查询。这将返回已删除的行。
如果您想要完美的安全性,则需要在访问表的所有应用程序中使用事务。正在执行SELECT
的过程应在同一事务中执行DELETE
。否则,另一个进程可能会在DELETE
和{{1}}之间向表中添加行,如果符合条件,则可能会删除这些行。
如果您只是想通过眼球检查结果来验证{{1}}查询的逻辑,那么这可能有点过分。
答案 1 :(得分:2)
假设您有一个DELETE查询,如:
DELETE FROM my_table WHERE foo='bar'
要查看将删除多少条记录,您可以先运行:
SELECT count(*) from my_table where foo='bar'
该查询的结果将是满足相同条件的记录数。
答案 2 :(得分:1)
您可以使用SELECT然后使用mysqli_affected_rows来获取要删除的行数。 如果您想要来自行的数据,那么您可以使用SELECT获取它。
答案 3 :(得分:1)
在陈述之前添加解释
答案 4 :(得分:0)
1)创建一个分析行的函数:
function checkRows($table){
$query = 'SELECT * FROM ' . $table;
// execute SELECT query
// get the result
// using for loop, set $delete boolean based on whether to delete or not
return $delete;
}
2)创建一个删除内容的函数:
function deleteFromTable($table){
$query = 'DELETE FROM ' . $table;
// execute DELETE query
}
3)创建条件调用:
$table = 'SomeTable';
$validDelete = checkRows($table);
if($validDelete){
deleteFromTable($table);
}
这将允许您在删除之前执行记录验证。