cari

Rumah  >  Soal Jawab  >  teks badan

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>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粉529581199P粉529581199458 hari yang lalu549

membalas semua(1)saya akan balas

  • P粉817354783

    P粉8173547832023-08-29 00:13:45

    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

    balas
    0
  • Batalbalas