【问题标题】:DELETE FROM query via CSV contents MySQLDELETE FROM 通过 CSV 内容查询 MySQL
【发布时间】:2012-05-12 02:59:34
【问题描述】:

我有一个 CSV 文件上传到与包含我要从数据库中的表(一次全部)中删除的人的电子邮件地址的文件相同的目录中。我使用的代码正确回显,但不会从表中删除任何内容。 CSV 文件与包含以下代码的文件上传到同一目录。

<?php
    // Make a MySQL Connection
    mysql_connect("x", "x", "x") or die(mysql_error());
    mysql_select_db("volunteers2012") or die(mysql_error());
    mysql_query($sql);
    /********************************/

    $addresses = file('deleteEmails.csv');
    foreach($addresses as $address) {
        $safe_address = mysql_real_escape_string($address);
        $sql = "DELETE FROM vols2012 WHERE `email` = '$safe_address'";
        $result = mysql_query($sql) or die(mysql_error());
    }
    echo "DELETION A GREAT SUCCESS!";
    ?>

第 2 轮 - 尝试使用 .txt 文件

<?php
    // Make a MySQL Connection
    mysql_connect("x", "x", "x") or die(mysql_error());
    mysql_select_db("volunteers2012") or die(mysql_error());
    mysql_query($sql);
    /********************************/

    $addresses = "LOAD DATA LOCAL INFILE ('deleteEmails.txt')";
foreach($addresses as $address) {
$safe_address = mysql_real_escape_string($address);
$sql = "DELETE FROM vols2012 WHERE (email = '$safe_address')";
$result = mysql_query($sql) or die(mysql_error());
   }
    echo "DELETION A GREAT SUCCESS!";
    ?>

我仍然收到成功回显,但错误 - 为 foreach() 提供的参数无效。

【问题讨论】:

  • 它是 CSV 文件吗?还是只是电子邮件地址列表?
  • LOAD DATA INFILE 支持 CSV,因此您不需要 PHP 循环。
  • 这是一个包含一列电子邮件地址的 CSV 文件...我没有标记电子邮件列...现在尝试一下并加载数据

标签: php mysql database csv sql-delete


【解决方案1】:

我最终没有使用上传删除方法,而是创建了一个带有复选框的 html 页面以手动删除。最后,这是最好的方法,因为我需要将一些记录留在一个表中而不是另一个表中。

          <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <?php


       // Delete the customer rows (only if the form has been submitted)

         if(isset($_POST['submit']))
      {
      foreach($_POST['todelete'] as $delete_id) {

             $query="DELETE FROM volConfirm WHERE email='$delete_id'";


                mysql_query($query) or die ('Error in query: ' .mysql_errno() . mysql_error());
            }


        }


        // Display the customer rows with checkboxes for deleting
        $query="SELECT * FROM volConfirm";

        $result = mysql_query($query);
        while ($row = mysql_fetch_array($result)){
        echo '<input type="checkbox" value="' . $row['email'] .'"name="todelete[]" />';
        echo $row['agreeName'];
        echo ' '.$row['position'];
        echo ' '.$row['shift_times'];
        echo ' '.$row['email'];
        echo ' '.$row['confirmed'];
        echo '<br />';
        echo '<br />';
       }
     ?>

        <input type="submit" name="submit" value="Remove" />
      </form>

【讨论】:

    【解决方案2】:

    对于电子邮件地址的 CSV 列表,请尝试以下查询:

    PHP

    $emails = 'a@b.com,b@c.org,foo@example.org';
    

    SQL

    $emails = mysql_real_escape_string($emails);
    $sql = "DELETE FROM vols2012 WHERE `email` IN ({$emails})";
    mysql_query($sql);
    

    【讨论】:

    • 但是我在哪里调用 .csv 文件呢?
    • 在上面的例子中,我只是假设CSV文件是通过fopen();file_get_contents();读取的。为简洁起见,我只是将其排除在外。
    • 啊- 你以为我知道怎么做?我受宠若惊:) 我确实有一个我认为包含类似内容的下载 php 文件。我不确定如何修改行删除。我用来删除的文件是否需要包含所有列标题?
    • 哦,嗯。我从第一个示例中假设 CSV 文件实际上是 $emails 变量中指定的格式。最后,没有“设置”的方法可以做到这一点,这完全取决于源 CSV 文件的外观,以及你想用它做什么。提供 CSV 源可能有助于获得更好的答案。
    猜你喜欢
    • 2013-06-17
    • 2011-05-27
    • 1970-01-01
    • 2016-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    相关资源
    最近更新 更多