php - 从for循环中的数组中获取值以在MySQL中使用

时间:2014-05-23 21:52:10

标签: php mysql arrays

我所拥有的是Wordpress中的自定义管理页面,用户可以在其中添加所有输入到数据库中的名称/标题/ mp3。在同一页面上,我还让它从数据库中选择所有条目,并在它们旁边用复选框列出它们,我试图让它使用数组从数据库中删除已检查的条目。这就是我到目前为止:

$songs = $_POST['song'];
    $num = count($songs);
    for($i=0; $i < $num; $i++){
        $sql = "DELETE FROM song_list WHERE title = '".$songs[]."'";
        echo $sql;
      var_dump($songs);
    }

当我转储$songs时,它拥有所有正确的数据,但是当我尝试将其拉出并将其添加到查询中时,我一无所获。它不是一个关联数组,所以我尝试了$songs[0]$songs[1],但我什么都没得到。

任何见解都将不胜感激,谢谢。

修改 的var_dump array(3) { ["Forget You"]=> string(2) "on" ["DJ Got Us Falling in Love"]=> string(2) "on" ["Blurred Lines"]=> string(2) "on" }

另外,我尝试添加$i($ songs [$ i])。它只是title = ''

3 个答案:

答案 0 :(得分:3)

您错过了数组索引:

$songs[$i]

变成:

$songs = $_POST['song'];
    $num = count($songs);
    for($i=0; $i < $num; $i++){
        $sql = "DELETE FROM song_list WHERE title = '".$songs[$i]."'";
        echo $sql;
    }

更优雅的方法是使用foreach循环:

$songs = $_POST['song'];
foreach($songs as $song) {
    $sql = "DELETE FROM song_list WHERE title = '".$song."'";
    echo $sql;
}

更优雅的方法是使用预准备语句(使用PDO):

// Prepare statement
$stmt = $dbh->prepare('DELETE FROM song_list WHERE title = :song');

$songs = $_POST['song'];
foreach($songs as $song) {
    // Bind and execute
    $stmt->bindParam(':song', $song);
    $stmt->execute();
}

答案 1 :(得分:1)

只是为了让它更简单,更短 - 单行:)

$sql =  "DELETE FROM song_list " .
        "WHERE title IN ('" . implode("','", $_POST['song']) . "')";

需要注意的事项:

  • 注意SQL注入攻击 - 永远不要将用户输入字符串($ _GET,$ _POST等)直接连接到SQL中!
  • 按标题删除是一个非常糟糕的解决方案,因为如果您拥有标题,例如符号',那么您的SQL将会中断。这就是SQL id字段发明的原因:)

答案 2 :(得分:0)

将$ i添加到数组中,您将获得给定位置的值。 但你可以像这样编写你的代码:

if(isset($_POST['song']) {
    foreach($_POST['song'] as $key => $title) {
        $sql = "DELETE FROM song_list WHERE title = '".$title."'";
        echo $sql;
    }
}