Php 为什么我的数据在MySQL中插入了两次
我正在使用PHP和MySQL数据库做我的学校项目。当我尝试在数据库中导入数据时,会遇到一个问题。在第一个表(murid表)中,它工作得很好,但在第二个表(pendaftaran表)中,它似乎导入了两次。这是我的PHP代码。我想知道为什么我的数据会在pendaftaran表中插入两次Php 为什么我的数据在MySQL中插入了两次,php,mysql,Php,Mysql,我正在使用PHP和MySQL数据库做我的学校项目。当我尝试在数据库中导入数据时,会遇到一个问题。在第一个表(murid表)中,它工作得很好,但在第二个表(pendaftaran表)中,它似乎导入了两次。这是我的PHP代码。我想知道为什么我的数据会在pendaftaran表中插入两次 <?php session_start(); $username = $_SESSION['username']; $conn = mysqli_connect('localhost','root','','d
<?php
session_start();
$username = $_SESSION['username'];
$conn = mysqli_connect('localhost','root','','darksith');
if(!$conn)
{
echo 'Not connected';
}
if (isset($_POST['importbutton'])) {
$namaFail = $_FILES['file']['tmp_name'];
if ($_FILES['file']['size'] > 0) {
$fail = fopen($namaFail, 'r');
while (!feof($fail)) {
$data = fgetcsv($fail, '0');
$query = "SELECT * FROM murid WHERE No_Sekolah_Murid = '".$data[0]."'";
$result = mysqli_query($conn, $query);
if (empty($data[0] || $data[1] || $data[2] || $data[3])) {
echo "<script>
window.alert('Sila isikan semua medan dalam fail!');
window.location = '';
</script>";
//exit();
} else {
if (mysqli_num_rows($result) === 0) {
$query1 = "INSERT INTO murid(No_Sekolah_Murid, Nama_Murid, Kelas, Tarikh_Daftar) VALUES('".$data[0]."', '".$data[1]."', '".$data[2]."',NOW())";
$query2 = "INSERT INTO pendaftaran(ID_Pendaftaran, ID_Pengguna, No_Sekolah_Murid, Kod_Pertubuhan) VALUES('', '$username', '".$data[0]."', '".$data[3]."')";
mysqli_query($conn, $query1);
var_dump(mysqli_query($conn, $query1));
mysqli_query($conn, $query2);
var_dump(mysqli_query($conn, $query2));
// echo "<script>
// window.alert('Rekod berjaya ditambahkan!');
// window.location = 'import.html';
// </script>";
} else {
"<script>
window.alert('Rekod gagal ditambahkan!');
window.location = 'import.html';
</script>";
}
}
} fclose($fail);
}
} else {
echo "<script>
window.alert('Import gagal. Sila cuba sekali lagi!');
window.location = 'import.html';
</script>";
exit();
}
?>
查询执行了两次
它正在这一行执行:
mysqli_query($conn, $query2);
然后在这一行再次执行:
var_dump(mysqli_query($conn, $query2));
调用mysqli\u query
函数将再次执行该函数。该行显示“执行mysqli_查询函数”,然后输出该函数的返回值
就我们观察到的行为而言,这两行基本上等同于书写:
$foo2 = mysqli_query($conn, $query2));
$foo2 = mysqli_query($conn, $query2));
var_dump($foo2);
问题代码中使用的模式似乎容易受到SQL注入的攻击。将准备好的语句与绑定占位符一起使用
小桌子
OWASP项目
有这么多成功的SQL注入攻击发生,这有点丢脸,因为在代码中避免SQL注入漏洞非常简单
查询正在执行两次
它正在这一行执行:
mysqli_query($conn, $query2);
然后在这一行再次执行:
var_dump(mysqli_query($conn, $query2));
调用mysqli\u query
函数将再次执行该函数。该行显示“执行mysqli_查询函数”,然后输出该函数的返回值
就我们观察到的行为而言,这两行基本上等同于书写:
$foo2 = mysqli_query($conn, $query2));
$foo2 = mysqli_query($conn, $query2));
var_dump($foo2);
问题代码中使用的模式似乎容易受到SQL注入的攻击。将准备好的语句与绑定占位符一起使用
小桌子
OWASP项目
有这么多成功的SQL注入攻击发生,这有点丢脸,因为在代码中避免SQL注入漏洞非常简单
更改下面提到的代码:
mysqli_query($conn, $query2);
var_dump(mysqli_query($conn, $query2));
到
更改下面提到的代码:
mysqli_query($conn, $query2);
var_dump(mysqli_query($conn, $query2));
到
移除并移动var_转储。请参阅关于准备statements@Mr.Blue非常感谢你。我没有意识到var_垃圾场。顺便问一下,为什么var_dump会让它输入重复项?我认为var_dump只显示变量类型和values@ChuahHaoMin您在var_dumps()内部再次执行mysqli_query(),这就是为什么会有重复的插入。请删除并移动var_dumps。请参阅关于准备statements@Mr.Blue非常感谢你。我没有意识到var_垃圾场。顺便问一下,为什么var_dump会让它输入重复项?我认为var_dump只显示变量类型和values@ChuahHaoMin您在var_dumps()中再次执行mysqli_query(),这就是为什么会有重复的插入。