我正在尝试创建一个注册页面,但PHP告诉我我的参数不正确,除非我需要为自动增量主ID键添加参数,否则没有意义。
这是我的SQL查询调用:
mysql_query("INSERT INTO Users (username, password, fname, lname, email) VALUES ('%s', '%s', '%s', '%s, '%s')",
mysql_real_escape_string($username),
mysql_real_escape_string($password),
mysql_real_escape_string($first),
mysql_real_escape_string($last),
mysql_real_escape_string($email)) or die(mysql_error());
它在这个代码块的最后一行给出了错误的参数计数。有任何想法吗?我直接从我的数据库中复制并粘贴了行名。
我的表格如下:
id - int(11) - auto-incrementing
username - varchar(20)
password - varchar(20)
fname - varchar(35)
lname - varchar(35)
email - varchar(254)
答案 0 :(得分:5)
您已将SQL查询格式化为sprintf()
来电,但不要拨打sprintf()
mysql_query(sprintf("INSERT INTO Users (username, password, fname, lname, email) VALUES ('%s', '%s', '%s', '%s', '%s')",
mysql_real_escape_string($username),
mysql_real_escape_string($password),
mysql_real_escape_string($first),
mysql_real_escape_string($last),
mysql_real_escape_string($email))) or die(mysql_error());
// also note some parentheses out of place ^^^^^^^^^^^^^^^^^^^^^^^^
答案 1 :(得分:2)
这是PHP告诉你的参数,而不是MySQL。
您尝试使用mysql_query
之类的sprintf
,而不是mysql_query
。 sprintf
接受可选的数据库资源标识符和查询字符串。两个参数。就是这样。
如果你做想要使用mysql_query(
sprintf(
"INSERT INTO Users (username, password, fname, lname, email) VALUES ('%s', '%s', '%s', '%s, '%s')",
mysql_real_escape_string($username),
mysql_real_escape_string($password),
mysql_real_escape_string($first),
mysql_real_escape_string($last),
mysql_real_escape_string($email)
)
) or die(mysql_error());
,那就去吧:
mysql_query
但请记住,{{1}}的第一个参数只是一个字符串。没有魔力。
答案 2 :(得分:1)
mysql_query(
sprintf("INSERT INTO Users (username, password, fname, lname, email) VALUES ('%s', '%s', '%s', '%s, '%s')",
mysql_real_escape_string($username),
mysql_real_escape_string($password),
mysql_real_escape_string($first),
mysql_real_escape_string($last),
mysql_real_escape_string($email)))
or die(mysql_error()); // sprintf to build a final string of your query by given format and "or die statement" is outside the mysql_query function call.