PHP错误的参数

时间:2011-08-11 17:34:42

标签: php parameters

我正在尝试创建一个注册页面,但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)

3 个答案:

答案 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_querysprintf接受可选的数据库资源标识符和查询字符串。两个参数。就是这样。

如果你想要使用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.