【问题标题】:need to simplify inserts into a loop for PDO MySQL需要简化插入到 PDO MySQL 的循环中
【发布时间】:2013-04-22 07:04:31
【问题描述】:

所以我有这段代码(如下),我想将重复行的堆栈简化为一个简单的循环,该循环给定和输入(比如 9)为 URL 和 LISTNUM 增加这些值。这可能真的很简单,但由于某种原因我无法理解它 - 仅仅是因为我不确定如何处理其他变量内部的变量......比如 $_POST[$n]

if ($_POST[subby] == "subby" )
{

        try {
        $dbh = new PDO('mysql:host=db2asdfasdf.net;dbname=adsfasdf04', $user, $pass);
          echo "Connected\n";
        } 
        catch (Exception $e) {
          die("Unable to connect: " . $e->getMessage());
        }

        try {  
          $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

          $dbh->beginTransaction();
          $dbh->exec("insert into vim_playlist4 (url, listnum) values ($_POST[video1], 1)");
          $dbh->exec("insert into vim_playlist4 (url, listnum) values ($_POST[video2], 2)");
           $dbh->exec("insert into vim_playlist4 (url, listnum) values ($_POST[video3], 3)");
            $dbh->exec("insert into vim_playlist4 (url, listnum) values ($_POST[video4], 4)");
             $dbh->exec("insert into vim_playlist4 (url, listnum) values ($_POST[video5], 5)");
              $dbh->exec("insert into vim_playlist4 (url, listnum) values ($_POST[video6], 6)");
                      $dbh->exec("insert into vim_playlist4 (url, listnum) values ($_POST[video7], 7)");
                              $dbh->exec("insert into vim_playlist4 (url, listnum) values ($_POST[video8], 8)");
                                      $dbh->exec("insert into vim_playlist4 (url, listnum) values ($_POST[video9], 9)");


          $dbh->commit();

        } 
        catch (Exception $e) {
          $dbh->rollBack();
          echo "Failed: " . $e->getMessage();
        }

}
else 
{}

【问题讨论】:

    标签: mysql loops pdo insert


    【解决方案1】:

    你可以这样插入:

    insert into vim_playlist4 (url, listnum) values 
    ($_POST[video1], 1), 
    ($_POST[video2], 2),
    ($_POST[video3], 3), 
    ($_POST[video4], 4)
    

    不要忘记在插入数据之前对其进行清理,因为您目前有很多 SQL 注入易发区域。

    以下是清理数据的方法:

    <?php
    $dbh->beginTransaction();
    $sql = $dbh->prepare("insert into vim_playlist4 (url, listnum) values 
    (?, 1), (?, 2), (?, 3), (?, 4), (?, 5), (?, 6), (?, 7), (?, 8), (?, 9)");
    
    $sql->execute(array($_POST["video1"], $_POST["video2"], $_POST["video3"],
        $_POST["video4"], $_POST["video5"] ,$_POST["video6"], $_POST["video7"],
        $_POST["video8"], $_POST["video9"]));
    
    $dbh->commit();
    

    【讨论】:

    • 非常感谢!我不太明白消毒建议。我从 MySQL 查询切换到 PDO 系统,因为人们告诉我我很容易受到攻击,而 PDO 是解决方案。那这怎么还是不安全呢?
    • 我更新了 php 部分。它显示了一种清理数据的方法。
    猜你喜欢
    • 2015-08-20
    • 2023-03-10
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-10
    • 1970-01-01
    相关资源
    最近更新 更多