我正在使用SQL 2000。 我怎样才能逃避单引号;并且在没有得到SQLi的情况下双引入查询?
PHP:
$Username = "s'ql'fp".'"ffo"t';
SQL:
$Query = "INSERT INTO Users (Username, Password) VALUES (".$Username.", '432432')";
mssql_query($Query);
抱歉我的英文不好:S
答案 0 :(得分:1)
您必须将字符串常量括在单引号中,并在SQL中将所有单引号括起来:
PHP:
$Username = "s'ql'fp".'"ffo"t'";
SQL:
$Query = "INSERT INTO Users (Username, Password) VALUES ('"
. str_replace("'", "''", $Username),
. "', '432432')";
mssql_query($Query);
str_replace("'", "''", $Username)
将是"s''ql''fp".''"ffo"t''"
,我。即所有单引号加倍。这不会更改$Username
变量,只会更改用作SQL语句的字符串。
也许,您也会为密码执行此操作(如果它不是您知道不包含引号的字符串,就像您在此处使用的文字密码一样)。
答案 1 :(得分:-2)
插入数据的mysqli_real_escape_string()应该可以解决问题。
你也应该把你的varchar()放在括号中,如果你插入VALUES(SOME STRING),它就会逃脱帮助,这主要是用整数作为。