请不要向我发送一个指向php.net的链接,引用mysql_real_escape_string作为唯一的响应。我已经阅读了这个页面,虽然我理解了一般概念,但是根据我的INSERT语句当前是如何构建的,我遇到了一些麻烦。
今天,我使用以下内容:
$sql = "INSERT INTO tablename VALUES ('',
'$_SESSION['Member1FirstName'],
'$_SESSION['Member1LastName'],
'$_SESSION['Member1ID'],
'$_SESSION['Member2FirstName'],
'$_SESSION['Member2LastName'],
'$_SESSION['Member2ID'] ....)
并且列表会继续显示20个以上的成员,并输入其他一些值。似乎示例中的大多数人已将所有数据存储在数组中。
在我的网站上,我接受表单输入,action =“”设置为self,发生php验证,如果验证通过,数据将存储到第2页的SESSION变量中,然后重定向到流程中的下一页(页面3)(整个过程大约8-10页)。
答案 0 :(得分:3)
您似乎已经知道应该使用mysql_real_escape_string
,但我想您不知道如何使用。您需要将它应用于您插入SQL的每个用户提供的字符串。以下示例应阐明这一点:
$sql = "INSERT INTO tablename VALUES ('', '" .
mysql_real_escape_string($_SESSION['Member1FirstName']) . "', '" .
mysql_real_escape_string($_SESSION['Member1LastName']) . "', '" .
etc..
或者选择prepared statements并绑定参数以获得更简单(更快)的解决方案。
答案 1 :(得分:2)
1)你错过了你的结束单引号,并且vars不会在单引号内被替换。
2)mysql_real_escape_string是答案,但是用sprintf试试吧:
$sql = sprintf("INSERT INTO tablename VALUES ('', '%s', '%s', '%d' )",
mysql_real_escape_string( $_SESSION['Member1FirstName']),
mysql_real_escape_string( $_SESSION['Member1LastName']),
$_SESSION['Member1ID']); // %d forced it as a digit
答案 2 :(得分:0)
为什么不能使用mysql_real_escape_string?
您还可以使用正则表达式仅允许名称中预期的某些字符