Неправильные параметры PHP - PullRequest
1 голос
/ 11 августа 2011

Я пытаюсь создать страницу регистрации, но 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 ]

5 голосов
/ 11 августа 2011

Вы отформатировали запрос 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 ^^^^^^^^^^^^^^^^^^^^^^^^
2 голосов
/ 11 августа 2011

Это 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 голос
/ 11 августа 2011
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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...