我已经成功地复制了连接表。耶!
现在,经过多次测试,我发现单个撇号(转义项)不被接受。最初在表单中创建新表行时,一切都通过以下方式运行:
$unit_id = mysqli_real_escape_string($dbc, trim($_POST['ajax_unit_id']));
现在,当我复制这些行来创建新记录时,我似乎不知道在哪里/如何再次 escape_string 以便再次允许使用单个撇号,例如名为 Don's Supah-Dupah 的标题应用程序
。
重复 php:
$sql1 = "CREATE TEMPORARY TABLE tmp
SELECT *
FROM ".ID_TABLE."
WHERE `unit_id` = " . $id . "";
$result = mysqli_query($dbc,$sql1) or die(mysqli_error($dbc));
$sql2 = "ALTER TABLE tmp
DROP COLUMN `unit_id`";
$result = mysqli_query($dbc,$sql2) or die(mysqli_error($dbc));
$sql3 = "UPDATE tmp
SET `title` = '" . $titleStamp . "'";
# ************************************************************ #
# ****** This is where I believe the issue is occurring ****** #
# ************************************************************ #
$result = mysqli_query($dbc,$sql3) or die(mysqli_error($dbc));
$sql4 = "INSERT INTO ".ID_TABLE."
SELECT 0,tmp.*
FROM tmp";
$result = mysqli_query($dbc,$sql4) or die(mysqli_error($dbc));
$unit_id1 = $dbc->insert_id; //mysqli_insert_id($dbc); // Store new unit_id as var
$sql5 = "DROP TABLE tmp;";
$result = mysqli_query($dbc,$sql5) or die(mysqli_error($dbc));
最佳答案
再次梳理编码后,我发现这个错误实际上与重复无关……有点关系。
注意:我提供这个答案是为了帮助有人退后一步,从 5000 米的高度而不是 5 英寸的高度审视自己的问题。希望这可以帮助人们把自己从兔子洞中拉出来,以获得更好的视角。
在复制之前,我设置了一个由初始 sql select 生成的变量 $title
$row = mysqli_fetch_array($rdata);
$title = $row['title'];
...然后连接标题
和日期时间戳
。
date_default_timezone_set(DEFAULT_TZ); // Default timezone set as Australia/Melbourne
$timestamp = date('Y/m/d h:i:s:a');
$titleStamp = $title." COPY ".$timestamp;
这个$title
变量是问题发生的地方。在将内容插入回新行之前,必须对新字符串进行转义。
$title = mysqli_real_escape_string($dbc, trim($row['title']));
瞧!
关于php - 撇号导致已通过 mysqli_real_escape_string & trim 运行的表项的行重复出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27162346/