我正在使用 PDO 重写我的所有代码。我被困在 PDO 中重写 DuplicateMySQLRecord 函数。
函数 DuplicateMySQLRecord ($table, $id_field, $id)
我只是无法解决这个问题 - 已经采取了很多措施,这一切都是一个悲惨的失败。
有人可以帮帮兄弟吗?
你为什么要为此做一个函数?
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 |
+-------------+-------+----------+
等等。所以设置一个唯一的标识符。
不安全的代码——这很容易受到 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);
}
}