我有一个带有ajax和php文件的html。我使用mysqli的本机php作为数据库。在连接中,我知道命名为config.php。这个脚本:
<?php
$db = new mysqli('localhost', 'root', '', 'student');
?>
然后我有像这样的ajax的html:
$("form#form").submit(function(event) {
event.preventDefault();
var formData = new FormData($(this)[0]);
$.ajax({
url: 'student/action.php',
type: 'POST',
data: formData,
async: false,
cache: false,
contentType: false,
processData: false,
success: function(data) {
console.log(data);
if (data == 0) {
alert('all data updated');
} else {
alert('failed');
}
}
});
return false;
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body>
<form id='form'>
<input type='hidden' name='type' value='new-data'>
<input name='name' type='text'>
<input name='class' type='text'>
<input name='hobbies' type='text'>
<button type='submit' name='submit'>Submit</button>
</form>
</body>
像这样的student / action.php脚本中的
<?
php require_once '../config/config.php';
switch ($_POST[ 'type']) {
case "new-data":
$qry1=$db->query("INSERT INTO tableA SET id=NULL, name='$_POST[name]' ");
$qry2=$db->query("INSERT INTO tableB SET id=NULL, name='$_POST[class]' ");
$qry3=$db->query("INSERT INTO tableC SET id=NULL, name='$_POST[hobbies]' ");
if($qry1 && $qry2 && $qry3) {
echo '1';
} else {
echo '2';
}
break;
}
?>
不,这个托管的应用程序和此处的连接不稳定。因此,当我通过点击submit
提交时,它会将数据发布到student / action.php。它必须插入所有查询($ qry1,$ qry2和$ qry3),但如果我连接错误,它只插入一些查询,而不是全部。如何解决它。感谢
答案 0 :(得分:1)
首先,永远不要在查询中直接使用$ _POST,$ _GET,$ _REQUEST(因为SQL注入),总是使用mysqli_real_escape_string:
$name=$db->mysqli_real_escape_string($_POST['name']);
$class=$db->mysqli_real_escape_string($_POST['class']);
$hobbies=$db->mysqli_real_escape_string($_POST['hobbies']);
不要忘记引语
如果你想确保所有请求都被执行或者所有失败都使用了事务(你需要innodb存储引擎);
$db->begin_transaction();
//Your queries…
$db->commit();
如果一个请求失败,则回滚所有先前的请求。你可以使用$ db-&gt; rollback();在提交之前取消所有查询。有关更多信息,请参阅php doc。