我正在尝试在我的代码中使用我的php运行我的SQL查询,但我无法让它运行。
这是我的疑问:
$sql = ee()->db->query("update exp_store_orders set shipping_company = '<a href='$png_code'>ciao</a>' where id = '$order->id'");
不要专注于第一部分,它是表达式。
问题是我试图在其中放置一个变量,但它不起作用。使用双引号会使我的代码生效并且单引号无法正常工作..
有什么建议吗?
答案 0 :(得分: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->id
,并且100%确定它是安全的。在实践中,你不是,你不是。
此外,如果$order->id
是一个数字,则不应将其用单引号括起来。但这并不重要,因为再次,你应该在那里使用占位符,而不是连接值。
还有一件事:请注意上面"
s的转义,如\"
中所示。您无法设置shipping_company = '<a href='$png_code'>ciao</a>'
之类的值,因为数据库认为字符串在href=
之后结束;当你以这种方式构建字符串时,它不知道如何处理'
之外的任何事情。