Bagaimana untuk menyelesaikan masalah tidak dapat mengemas kini "Lajur Tarikh": Bagaimana untuk memuat naik fail CSV dengan betul semasa mengemas kini jadual pangkalan data MySQL
P粉529581199
P粉529581199 2023-08-28 13:46:51
0
1
501
<p>Masalah utama dalam kod saya ialah saya tidak boleh mengemas kini "tarikh" daripada fail csv ke dalam jadual pangkalan data mysql menggunakan php. Baris kod $date = mysqli_real_escape_string($connect, $data[1]); Saya sedang mencari sebarang pertanyaan alternatif untuk baris kod tertentu ini. </p> <p>Ini ialah fail csv: https://drive.google.com/file/d/1EdMKo-XH7VOXS5HqUh8-m0uWfomcYL5T/view?usp=sharing</p> <p>Ini ialah kod lengkap: </p> <pre class="brush:php;toolbar:false;"><?php //index.php $connect = mysqli_connect("localhost","root","1234","ml_database"); $mesej =''; if(isset($_POST["muat naik"))){ if($_FILES['product_file']['name']){ $nama fail = meletup(".”,$ _FAIL ['fail_produk'] ['nama']); if(end($ nama fail)==“csv”){ $handle = fopen($ _FILES ['product_file'] ['tmp_name'],“r”); manakala($ data = fgetcsv($ pemegang)){ $data_id = mysqli_real_escape_string($ connect,$ data [0]); $tarikh = mysqli_real_escape_string($ connect,$ data [1]); //我的问题 $births = mysqli_real_escape_string($ connect,$ data [2]); $query = “KEMASKINI my_table SET tarikh ='$ tarikh', kelahiran ='$ kelahiran', WHERE data_id ='$ data_id'”; mysqli_query($ connect,$ query); } fclose($ pemegang); pengepala(“lokasi:index.php?kemas kini = 1”); } lain { $message ='<label class="text-danger">Sila pilih hanya fail CSV</label>'; } } lain { $message ='<label class="text-danger">Sila pilih fail</label>'; } } if(isset($_GET["kemas kini"])){ $message ='<label class="text-success">Kemas kini produk selesai</label>'; } $query = "PILIH * DARI my_table"; $result = mysqli_query($connect, $query); ?> <!DOCTYPE html> <html> <kepala> <title>Kemas kini pangkalan data Mysql dengan memuat naik fail CSV menggunakan PHP</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"/> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> </head> <badan> <br /> <div class="container"> <h2 align="center">Kemas kini pangkalan data Mysql dengan memuat naik fail CSV menggunakan PHP</a></h2> <br /> <form method="post" enctype='multipart/form-data'> <p><label>Sila pilih fail (format CSV sahaja)</label> <jenis input = nama “fail” = “fail_produk”/></p> <br /> <jenis input = “serahkan” nama = “muat naik” kelas = “btn btn-info” nilai = “muat naik”/> </form> <br /> <?php echo $message ?> <h3 align="center">Kelahiran</h3> <br /> <div class="table-responsive"> <table class="table table-bordered table-striped"> <tr> <th>Tarikh</th> <th>Lahir</th> </tr> <?php while($row = mysqli_fetch_array($result)) { bergema ' <tr> <td>'.$row ["tarikh"].'</td> <td>'.$row ["kelahiran"].'</td> </tr> '; } ?> </table> </div> </div> </badan> </html></pre></p>
P粉529581199
P粉529581199

membalas semua(1)
P粉817354783

Pertama, anda perlu membaca dan membuang baris pengepala dalam CSV. Kemudian, menggunakan pertanyaan yang sesuai, disediakan dan berparameter, anda boleh mengemas kini pangkalan data dengan betul. Memandangkan tarikh dalam fail .csv berada dalam format yang betul, tiada tindakan diperlukan, tetapi ini mungkin tidak berlaku dengan fail CSV lain dan selalunya tarikh perlu diformat semula sebelum ia boleh disimpan dengan betul ke dalam jadual.

<?php
//index.php
$connect = mysqli_connect("localhost", "root", "1234", "ml_database");
$message = '';

if(isset($_POST["upload"])) {
    if($_FILES['product_file']['name']) {
        $filename = explode(".", $_FILES['product_file']['name']);

        if(end($filename) == "csv") {
            $handle = fopen($_FILES['product_file']['tmp_name'], "r");
            // 读取并忽略标题行
            $data = fgetcsv($handle, 1000, ",");

            // 准备查询一次
            $query = "UPDATE my_table 
                            SET date = ?, 
                                births = ?
                          WHERE data_id = ?";
            $stmt = $connect->prepare($query);

            // 循环遍历csv剩余的行
            while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
                $stmt->bind_param('sss', $data[0],$data[1],$data[2]);
                $stmt->execute();
            }
            fclose($handle);
            header("location: index.php?updation=1");
            exit;   // 重定向后一定要使用exit
        } else {
            $message = '';
        }
    } else {
        $message = '';
    }
}

Nota: Saya menganggap kesemua 3 lajur adalah daripada jenis teks.

$stmt->bind_param('sss', $data[0],$data[1],$data[2]);
                   ^^^

Jika date_id是整数类型,您可以将其更改为'ssi',尽管3个s biasanya berfungsi dengan baik juga.

Rujukan:

fgetcsv
mysqli_prepare
mysqli_bind_param

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!