我正在使用PDO重写我的所有代码。我在PDO中重写了DuplicateMySQLRecord函数。
function DuplicateMySQLRecord($ table,$ id_field,$ id)
我无法围绕这一点思考 - 已经采取了许多措施,这一切都是一个悲惨的失败。
有人可以帮助兄弟吗?
答案 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);
}
}