如何使用PDO从MySQL复制行

时间:2013-02-04 23:39:28

标签: php mysql pdo

我正在使用PDO重写我的所有代码。我在PDO中重写了DuplicateMySQLRecord函数。

function DuplicateMySQLRecord($ table,$ id_field,$ id)

我无法围绕这一点思考 - 已经采取了许多措施,这一切都是一个悲惨的失败。

有人可以帮助兄弟吗?

2 个答案:

答案 0 :(得分:0)

为什么要为此制作一个功能?

INSERT INTO my_table SELECT * FROM my_table WHERE column="data"

请记住,如果你没有唯一的分隔符(id等),这将导致严重的问题。

以此为例:

假设我有一张看起来像这样的表:

+-------------+-------+----------+
| something   | other | there_is |
+-------------+-------+----------+
| huh         | what  | no id    |
+-------------+-------+----------+

我执行

INSERT INTO my_table SELECT * FROM my_table WHERE there_is="no id"

现在我们有了

+-------------+-------+----------+
| something   | other | there_is |
+-------------+-------+----------+
| huh         | what  | no id    |
| huh         | what  | no id    |
+-------------+-------+----------+

如果我想再次执行该怎么办?这工作正常吗?好吧,这次我们会得到:

+-------------+-------+----------+
| something   | other | there_is |
+-------------+-------+----------+
| huh         | what  | no id    |
| huh         | what  | no id    |
| huh         | what  | no id    |
| huh         | what  | no id    |
+-------------+-------+----------+

然后

+-------------+-------+----------+
| something   | other | there_is |
+-------------+-------+----------+
| huh         | what  | no id    |
| huh         | what  | no id    |
| huh         | what  | no id    |
| huh         | what  | no id    |
| huh         | what  | no id    |
| huh         | what  | no id    |
| huh         | what  | no id    |
| huh         | what  | no id    |
+-------------+-------+----------+

等。所以设置一个唯一的标识符。

答案 1 :(得分:-1)

不安全的代码 - 这非常容易受到SQL注入攻击。强烈建议正确使用准备好的陈述。

基于功能名称:

function DuplicateMySQLRecord ($table, $id_field, $id) {
   $result = $dbconn->query("SELECT * FROM ".$table." 
                                WHERE ".$id_field." = '".$id."' LIMIT 1");
   $row = $result[0];
   $SQL = "INSERT INTO ".$table." (";
   $first = true;
   foreach($row as $key=>$val) {
      if($key != $id_field) {
         if(!$first) {
           $SQL.=',';
           $SQL .=$key;
        }
      }
   }
   foreach($row as $key=>$val) {
      if($key != $id_field) {
         if(!$first) {
           $SQL.=',';
           $SQL .="'".$val."'";
         }
      }
   }
   $dbconn->exec($SQL);
 }

}