我完全改写了这个答案。
由于很难将我写的内容拼接到你写的内容中,所以我会完整地或根本不使用这段代码。
这个
free_result
和
fetch_row
命令不应该在那里。它们将导致错误,因为没有来自的结果集
INSERT
和
DELETE
查询。
$msgid = $_POST['roll_id'];
if(strlen($msgid) > 0):
$queries = array();
$queries[] = "INSERT INTO del_subscription SELECT * FROM subscription WHERE `name`='".$msgid."' AND `renewal`='yes';";
$queries[] = "INSERT INTO del_user_data SELECT * FROM user_data WHERE `name`='".$msgid."' AND `wait`='no';";
$queries[] = "DELETE FROM subscription WHERE `name`='".$msgid."' AND `renewal`='yes';";
$queries[] = "DELETE FROM user_data WHERE `name`='".$msgid."' AND `wait`='no';";
// Set flag TRUE unless we find otherwise
$ALL_SUCCESSFUL = TRUE;
// Executes query and enters if the first query was successful.
if ( mysqli_multi_query($con, implode(' ',$queries)) ):
// This do-while tests if all other queries were successful
do
if( $result = mysqli_store_result($con) ):
if(!$result):
$ALL_SUCCESSFUL = FALSE ;
endif;
endif;
// Changes internal pointer to next result.
while( mysqli_next_result($con) );
endif; // If first query was successful
if( $ALL_SUCCESSFUL ):
echo showMessage('Member Deleted!');
else:
echo showMessage('ERROR! Delete Operation Unsuccessful');
endif;
else:
echo showMessage('ERROR! No roll_id given');
endif; // If roll_id is valid
/* close connection */
mysqli_close($con);
function showMessage($msg){
$html = '';
$html.= "<html><head>";
$html.= "<meta http-equiv='refresh' content='0' url='view_mem.php' />";
$html.= "<script>alert('".$msg."');</script>";
$html.= "</head></html>";
return $html;
}
如果您发现第一个查询执行,但其他查询没有执行,这不是因为php代码。这是因为您编写的查询。在里面
mysqli_multi_query()
,所有查询都在同一调用中执行,因此如果执行了一个查询,则它们都已执行。。。即使不是全部都成功了。
基本上,这意味着
multi_query
根本不会影响其他SQL查询的结果。我们基本上可以扔掉所有的东西,然后写下这篇文章,让它发挥作用:
$msgid = $_POST['roll_id'];
$queries = array();
$queries[] = "INSERT INTO del_subscription SELECT * FROM subscription WHERE `name`='".$msgid."' AND `renewal`='yes';";
$queries[] = "INSERT INTO del_user_data SELECT * FROM user_data WHERE `name`='".$msgid."' AND `wait`='no';";
$queries[] = "DELETE FROM subscription WHERE `name`='".$msgid."' AND `renewal`='yes';";
$queries[] = "DELETE FROM user_data WHERE `name`='".$msgid."' AND `wait`='no';";
mysqli_multi_query($con, implode(' ',$queries));
mysqli_close($con);
此外,对于
桌子
到
桌子
直接的
插入,插入
使用时未定义列的查询
SELECT *
正如您所写的,请仔细检查数据库,以确保两个表具有相同的列结构,并且列字段匹配。然而,这不太可能中断查询。