面对逃脱的反斜杠不断堆积的情况

时间:2015-08-21 22:30:33

标签: javascript php html mysql json

以下是这种情况。我有form喜欢

<form id="myform">
     <input type="text" name="some_column_name">
     <input type="text" name="some_other_column_name">   
</form>

实质上是更新数据库中的行。数据库被加载&#34;像JSON一样在页面上

<script type="text/javascript">
    rows = <?php echo json_encode($allRows); ?>;
</script>

当用户点击页面上的项目时,表单将填充来自数据库(MySQL)的相应信息,然后用户可以更新该信息并将更新提交给数据库。

问题在于撇号和其他角色。输入到数据库的文本,如

  

这里有一些文字

成为

  

这里有一些文字

将其加载回页面上的input

我添加和更新数据库的程序是

/* Note: Have to break up prepare statement because https://core.trac.wordpress.org/ticket/12819 */
$addQuery = $wpdb->prepare("INSERT INTO projs (compname,projname,imageurl,sumsmall,sumfull,results,caseid=" . $caseid . ",hide) VALUES (%s,%s,%s,%s,%s,%s,%d,%d)",
                            array($compname, $projname,$imageurl,$sumsmall,$sumfull,$results,$hide));        
$message .= $wpdb->query($addQuery) 
            ? 'Successfully added project to the database.'
            : 'Error occurred when trying to add project to database: ' . $wpdb->last_error;

/* Note: Have to break up prepare statement because https://core.trac.wordpress.org/ticket/12819 */
$updateQuery = $wpdb->prepare("UPDATE projs SET compname=%s,projname=%s,imageurl=%s,sumsmall=%s,sumfull=%s,results=%s,caseid=" . $caseid . ",hide=%d WHERE id=%d",
                              array($compname, $projname, $imageurl, $sumsmall, $sumfull, $results, $hide, $id));
$message .= $wpdb->query($updateQuery) !== false
            ? 'Successfully updated project.'
            : 'Error occurred when trying to update project in database: ' . $wpdb->last_error;
break;

我觉得WordPress的$wpdb->prepare搞砸了东西,或者我误用了它或什么东西。

1 个答案:

答案 0 :(得分:0)

这里有两个可能的问题。你有magic_quotes ON,它会将\添加到任何可能导致SQL注入的字符,例如&#39;和&#34;或者你的准备声明正在添加它。 在这种情况下,并且没有太多可用的额外信息,我很想相信您的PREPARE声明是&#34;消毒&#34;输入以及你看到这些价值观的原因。

  1. 检查未启用魔术引号。
  2. 不要使用准备声明。
  3. 验证输出,以便在找到类似\&#39;的值时从DB出来到前端它会自动剥离。
  4. 我希望这会有所帮助。