【问题标题】:Variable inside href inside php as a queryphp内href内的变量作为查询
【发布时间】:2018-04-07 04:21:35
【问题描述】:

我正在尝试在我的代码中使用我的 php 运行我的 sql 查询,但我无法让它运行。

这是我的查询:

$sql = ee()->db->query("update exp_store_orders set shipping_company = '<a href='$png_code'>ciao</a>' where id = '$order->id'");

不要关注第一部分,这是表达式引擎。

问题是我试图在其中放入一个变量,但它不起作用。使用双引号会破坏我的代码,而使用单引号则不起作用..

有什么建议吗?

【问题讨论】:

  • 在您的数据库中包含 HTML 通常是一个非常糟糕的计划。
  • 我知道!我讨厌混合内容,但在这种情况下我有,因为系统正在使用扩展,所以在这种情况下,以后几乎不可能广告 html
  • 您已深入危险区域,因此如果您有其他方法值得探索。在任何情况下,您必须使用带有占位符值的预准备语句。

标签: php mysql variables href


【解决方案1】:

你问了什么

您需要大括号 ({...}) 或字符串连接如果您打算这样做。 (你绝对不应该这样做,如下所述。)

例子:

$sql = ee()->db->query("update exp_store_orders set shipping_company = \"<a href='$png_code'>ciao</a>\" where id = '{$order->id}'");

// or

$sql = ee()->db->query("update exp_store_orders set shipping_company = \"<a href='$png_code'>ciao</a>\" where id = '" . $order->id . "'");

为什么这是错误的方法

但是这不是正确的做法。您应该使用准备好的语句,而不是将数据直接连接到您的查询中。以您的方式进行操作会使您对 SQL 注入持开放态度。理论上,您可以完全控制$order-&gt;id,并且 100% 确定它是安全的。在实践中,你没有,你也不是。

其他问题

另外,如果$order-&gt;id 是一个数字,则不应将其放在单引号中。但这并不重要,因为您应该在此处使用占位符,而不是串联值。

还有一件事:注意上面"s 的转义,如\"。您不能设置像shipping_company = '&lt;a href='$png_code'&gt;ciao&lt;/a&gt;' 这样的值,因为数据库认为字符串在href= 之后结束;当您以这种方式构建字符串时,它不知道如何处理 's 之外的任何内容。

【讨论】:

  • 澄清一下,使用 ExpressionEngine 对准备好的语句执行此操作的一种方法是 ee()-&gt;db-&gt;query("UPDATE exp_store_orders SET shipping_company = ? WHERE id = ?", array('ciao', $order-&gt;id)); 或者如果您愿意,您的第一个值可以是 HTML,因此您可以输入 'ciao' 而不是 '&lt;a href='.$png_code.'&gt;ciao&lt;/a&gt;'跨度>
  • 这是 png 代码,它的一部分不工作,另一部分工作正常。 Espressionengine 拥有自己的数据环境
  • @matto 是的,如果您使用 EE,EE 有自己的卫生设施,但您没有使用它,而只是执行原始查询。请参阅docs.expressionengine.com/latest/development/legacy/libraries/… 以获取有关如何使用其他准备好的带有参数的语句的更多信息。随时加入 ExpressionEngine Slack 频道 (expressionengine.com/community#slack) 以获得有关此频道的更具体帮助 - 他们在那里非常有帮助,并将指导最佳实践。
  • @Matto 见我上面的编辑。正如 WOUNDEDStevenJones 指出的那样,您没有使用任何消毒功能。如果不知何故将$order-&gt;id 设置为1' or 1=1 -- 之类的东西(作为温和 示例),您将被黑。
  • 次要更新 - 我上面的解决方案实际上缺少引号,因此您应该传递给参数数组的第一个值应该是 '&lt;a href="'.$png_code.'"&gt;ciao&lt;/a&gt;' (单引号和 . 在 PHP 中创建一个字符串,而双引号是生成的字符串的一部分,用于定义href 值,所以你最终会得到类似&lt;a href="image.png"&gt;ciao&lt;/a&gt; 而不是&lt;a href=image.png&gt;ciao&lt;/a&gt;
猜你喜欢
  • 2017-12-28
  • 2016-07-03
  • 2015-12-25
  • 1970-01-01
  • 2011-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-30
相关资源
最近更新 更多