我想知道为什么以下查询有。和“”在“。$ _ POST ['date']。”等
$query = "INSERT INTO eventcal ('eventDate','eventTitle','eventContent','user',
'user_id') VALUES('".$_POST['date']."','".addslashes($_POST['eventTitle'])."',
'".addslashes($_POST['eventContent'])."')";
如果我更改为以下内容,是否会有任何差异?
VALUES('$_POST['date']','addslashes($_POST['eventTitle'])',
'addslashes($_POST['eventContent'])')
提前致谢。
答案 0 :(得分:2)
它是PHP形式的连接(引号标记字符串的结尾)。在JavaScript和许多其他语言中,它是连接的+
字符。
echo "hello" . " " . "world!"; // Outputs 'hello world'
是的,做出这种改变会大大改变其含义。
最后,这会对严重的 SQL注入攻击开放,因为date
未正确转义。
始终清理您的输入并尽可能使用参数化查询。
答案 1 :(得分:1)
“dot”运算符是PHP的字符串连接运算符。我认为使用addslashes
函数比第一个示例中的函数更好,但是您仍然需要使用字符串连接,因为PHP的字符串插值仅支持变量。
答案 2 :(得分:1)
单引号禁止变量插值,并且数组索引中使用的单引号也会终止字符串。
另外,使用支持查询参数化的库,而不是像这样添加值。
答案 3 :(得分:0)
是的,只有变量用双引号解析,这意味着你的函数不会在第二个代码块中执行。