2009-03-29 2 views
0

Hy все,Одд Mysql вопрос о вставной

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

$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)

дата = INT (8)

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

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

+0

Если вы распечатываете $ query, то что он содержит? –

ответ

4

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

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

+0

+1 Это лучший совет , в духе «научить человека ловить рыбу!» –

0

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

  1. Вы спасаясь ваши данные правильно? См mysql_real_escape_string()
  2. Вы не должны закончить свои запросы с запятой при использовании mysql_query()
6

Получить в привычку избежать всех входов базы данных с 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(); 
} 
1

Возможно, значение $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

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

Смежные вопросы