【问题标题】:Sql - insert text with carriage returnsSql - 用回车插入文本
【发布时间】:2013-12-21 23:39:58
【问题描述】:

在我的应用程序中,我将一个大文本作为 post 参数发送到服务器。文字就像下面的代码:

{"objects":[{"type":"path","originX":"center","originY":"center","left":138,"top":250.25,"width": 184,"嘿嘿 ght":254,"fill":null,"overlayFill":null,"stroke":{"source":"function 匿名() {\n\n var squareWidth = 10, squareDistance = 2;\n\n var patternCanvas = fabric.document.createElement('canvas');\n
patternCanvas.width = patternCanvas.height = squareWidth + 平方距离;\n var ctx = patternCanvas.getContext('2d');\n\n ctx.fillStyle = \"#005E7A\";\n ctx.fillRect(0, 0, squareWidth, squareWidth);\n\n 返回 patternCanvas;\n
\n}","re​​peat":"repeat","offsetX":0,"offsetY":0},"strokeWidth":15,"strokeDashArray":null,"strokeLineCap":"round","strokeLineJoin": "round","strokeMiterLimit":10,"scaleX":1,"scaleY":1,"angle":0,"flipX":false,"flipY":false,"opacity":1,"selectable": true,"hasControls":true,"hasBorders":true,"hasRotatingPoint":true,"transparentCorners":true,"perPixelTargetFind":false,"shadow":null,"visible":true,"clipTo":null, "路径":[["M",69.5,0],["Q",69.5,0,70,0],["Q",70.5,0,70.75,0],["Q",71, 0,71.5,....

因为你有回车。我想将此文本作为 blob 插入到 mysql 表中。但这并不成功。我认为原因是其中的回车,因为其他没有回车的示例效果很好。

我怎样才能成功地将这种文本插入到我的表格中?

顺便说一句,我正在使用带有 db session 的 codeigniter 购物车类,并尝试将此文本保留为购物车项目选项。

【问题讨论】:

  • 为什么不将它作为 varchar 而不是 blob 提交?
  • 它有什么改变吗?因为可能问题不在于文本的大小,所以在其中回车。
  • 使用查询参数也解决了很多这样的问题。
  • 您的问题是由于您没有转义输入(在这种特殊情况下,反斜杠没有正确转义\n\n 应该看起来\\n\\n2),这使您的代码容易受到sql注入.您应该使用准备好的语句来完全避免这种情况。
  • 谢谢,那么我如何在 php 中转义这些。

标签: php mysql sql codeigniter


【解决方案1】:

您必须了解转义的工作原理。如果你把一些转义的东西放在这样的字符串中:

s = "Hello\nthere";

...那么结果将包含一个 REAL 换行符。变量本身看起来像“Hello”加上换行加上“there”。现在如果你把它交给一些 sql,它将得到换行符,而不是反斜杠加 n,这将是告诉 sql 插入换行符的正确版本。不,相反,您在引号内创建了一个带有真正换行符的 sql 字符串。

因此,您必须说“让我们创建一个告诉 sql 插入换行符的字符串”,并且要做到这一点,您必须告诉语言(无论您使用哪种语言)创建一个字符串,该字符串使换行。这就是为什么你必须逃离已经逃脱的东西。这有点像“告诉鲍勃告诉克莱尔来这里”的事情。

【讨论】:

  • 非常感谢,我正在使用codeigniter,我该如何在php中转义它
  • (我从没用过codeigniter)在php中你有几个选项可以转义字符串;试试addslashes / addcslashes,如果你知道你的字符串是什么样的,它们几乎总是足够的。 (如果它包含不受信任的用户输入,请更加小心!)
【解决方案2】:

所以我已经从 OP 中两次看到“如何在 PHP 中转义它”的问题,所以这里是如何使用 codeigniter 在 PHP 中转义:

第一个queries with CodeIgniter

您需要使用查询绑定来帮助确保在运行之前清理所有内容。

假设如下:

$sql = 'SELECT * FROM my_table WHERE first_name=? AND city=?';

注意两个问号。这些是我们输入值的占位符。

当我执行以下操作时

$this->db->query($sql,array('Mike','Asheville'));

数组中的每个值到每个 ? 都有 1-1 映射,所以第一个 ?将由迈克取代,第二个?将被阿什维尔取代。这两个值都会被适当地转义。

【讨论】:

    猜你喜欢
    • 2015-11-24
    • 2015-06-08
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    • 2010-12-07
    • 2015-02-17
    • 2014-01-16
    • 1970-01-01
    相关资源
    最近更新 更多