【问题标题】:apostrophe causing error with row duplication of table items already run through mysqli_real_escape_string & trim撇号导致已经通过 mysqli_real_escape_string & trim 运行的表项的行重复错误
【发布时间】:2015-01-25 13:26:12
【问题描述】:

我已经成功地复制了连接表。耶!

现在,经过多次测试,我发现不接受单个撇号(转义项)。最初在表单中创建新表行时,一切都通过以下方式运行:

$unit_id = mysqli_real_escape_string($dbc, trim($_POST['ajax_unit_id']));

现在,当我复制这些行以创建新记录时,我似乎不知道在哪里/如何再次 escape_string 以便再次允许使用单个撇号,例如名为 Don's Supah-Dupah App 的标题。

复制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));

【问题讨论】:

    标签: php mysql mysqli apostrophe duplication


    【解决方案1】:

    再次梳理编码后,我发现错误实际上与重复无关......有点。

    注意:我在如果它可以帮助那里的人退后一步,请从 5000 米处查看自己的问题……而不是从 5 英寸处。希望这可以帮助某人将自己从兔子洞中拉出来以获得更好的视角。

    在复制之前,我设置了一个由初始 sql 选择生成的变量 $title

    $row = mysqli_fetch_array($rdata);
    $title = $row['title'];
    

    ...然后连接 titledatetimestamp

    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']));
    

    瞧!

    【讨论】:

      猜你喜欢
      • 2019-10-09
      • 1970-01-01
      • 2015-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多