以下行会引发错误:
$query = "INSERT INTO mail_senders(mailAddress) VALUES ('$_POST[sender-email]')";
问题是连字符“ - ”
我可以轻松地用“_”更改“ - ”,但我想知道是否有可能逃脱该角色以供将来参考。
提前致谢
答案 0 :(得分:5)
要防止SQL注入,您应该转义输入。然后使用sprintf获取可读性并使用引号作为数组的索引。如果你不使用引号PHP将sender-email视为未定义的常量,并假设你实际上是指字符串“sender-email”。如果在某些时候你定义了发送者 - 电子邮件,你的代码可能会破坏。
$query = sprintf("INSERT INTO mail_senders(mailAddress) VALUES ('%s')", mysql_real_escape_string($_POST["sender-email"]));
答案 1 :(得分:1)
首先,正如您的代码所代表的那样,您很容易受到SQL注入攻击 - 您应该真正关注参数化查询。
我不确定您使用的数据库类型,我会使用Mysqli来写这个:
$dbUser = 'username';
$dbPass = 'password';
$dbHost = 'localhost';
$dbName = 'databasename';
$dbConnection = new mysqli($dbHost,$dbUser,$dbPass,$dbHost);
$query = "INSERT INTO mail_senders (mailAddress) VALUES (?)";
if ($statement = $dbConnection->prepare($query)) {
$statement->bind_param('s',$_POST['sender-email']);
$statement->execute();
//If this was a select statement, do stuff with result set here...
...
...
...
//As this is an insert, you'll probably want to know if you've successfully inserted a row so...
if ($statement->affected_rows > 0) {
//Snip - update successful.
}
//And then close the connection
$statement->close();
}
有关使用mysqli准备好的语句的更多信息,请查看the mysqli prepare documentation。
答案 2 :(得分:0)
应为$_POST['sender-email']
$query = "INSERT INTO mail_senders(mailAddress) VALUES ('{$_POST['sender-email']}')";