-5

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

函数 DuplicateMySQLRecord ($table, $id_field, $id)

我只是无法解决这个问题 - 已经采取了很多措施,这一切都是一个悲惨的失败。

有人可以帮帮兄弟吗?

4

2 回答 2

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    |
+-------------+-------+----------+

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

于 2013-02-06T17:08:34.290 回答
-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);
 }

}

于 2013-02-04T23:56:47.973 回答