Нечетная проблема Mysql на вставке - PullRequest
0 голосов
/ 29 марта 2009

Hy all,

Не уверен, что здесь происходит, но если я запущу это:

$query = 'INSERT INTO users 
(`id`, `first_name`, `second_name`, `register_date`, `lastlogin_date`) 
VALUES 
("'. $user_id . '", "' . $first_name .'", "'. $second_name . '", "' . $date . '", "' . $date . ");'; 
$result = mysql_query($query);

Я не получаю возврата, но если я поменяю его на это, все нормально:

$query = 'INSERT INTO users (`id`, `first_name`, `second_name`, `register_date`, `lastlogin_date`) 
VALUES ("21021212", "Joe", "Bloggs", "20090202", "20090202");'; 
$result = mysql_query($query);

Идентификатор пользователя = bigint (20)

имя = varchar (30)

второе имя = varchar (30)

date = int (8)

Сначала я подумал, что это проблема с варами, но они точно такие же и до сих пор не работают.

Любая помощь приветствуется.

Ответы [ 5 ]

6 голосов
/ 29 марта 2009

Привыкайте к экранированию всех входных данных базы данных с помощью mysql_real_escape_string - действительно, вы должны использовать какую-нибудь оболочку, например PDO или ADODb , чтобы помочь вам это, но вот как вы могли бы сделать это без:

$query = sprintf("INSERT INTO users ".
    "(id, first_name, second_name, register_date, lastlogin_date)".
    "VALUES('%s','%s','%s','%s','%s')",
    mysql_real_escape_string($user_id),
    mysql_real_escape_string($first_name),
    mysql_real_escape_string($second_name),
    mysql_real_escape_string($date),
    mysql_real_escape_string($date));

 $result = mysql_query($query);

, а также проверьте наличие ошибок с помощью mysql_error

 if (!$result)
 {
     echo "Error in $query: ".mysql_error();
 }
4 голосов
/ 29 марта 2009

Каков результат "mysql_error ()"? Всегда проверяйте это, особенно если что-то не работает.

Кроме того, выведите $ query, чтобы увидеть, как он выглядит на самом деле. Это может показывать.

1 голос
/ 29 марта 2009

Может быть значение $date было "1111'); DELETE FROM users;"?

Серьезно, хотя? Проблема в том, что вы не взаимодействуете со своей базой данных. Вы не должны передавать свои данные с вашим запросом. Вам необходимо указать запрос, параметры для запроса и передать фактические значения параметров при выполнении запроса. Все остальное неэффективно, небезопасно и подвержено ошибкам, как у вас.

Используя PDO или что-либо, поддерживающее параметризованные запросы, вы обнаружите, что подобные проблемы исчезают, поскольку вы вызываете свойство базы данных. Это также намного более безопасно и может ускорить работу базы данных.

$sth = $dbh->prepare("INSERT INTO users (`id`, `first_name`, `second_name`, `register_date`, `lastlogin_date`) VALUES (?,?,?,?,?)")
$sth->execute(array($user_id ,$first_name , $second_name , $date, $date ));
0 голосов
/ 29 марта 2009

in $ query = 'INSERT INTO users (id, first_name, second_name, register_date, lastlogin_date) VALUES ("'. $ User_id. '", "'. $ First_name. ' "," '. $ second_name.' "," '. $ date.' "," '. $ date.' "); Вы даете правильный формат даты? это может быть проблемой. в противном случае синтаксис все в порядке.

0 голосов
/ 29 марта 2009

В дополнение к повторению запроса и проверке mysql_error(), как @GoatRider предлагает:

  1. Правильно ли вы экранировали свои данные? См mysql_real_escape_string()
  2. Вы не должны заканчивать запросы точкой с запятой при использовании mysql_query()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...