MySQL вставка проблемы - PullRequest
       12

MySQL вставка проблемы

0 голосов
/ 05 января 2010

У меня действительно странная проблема. Я понятия не имею, почему это не работает. я создаю пользователя, получаю идентификатор и вставляю строку на основе этого идентификатора в другую таблицу. строка вставляется с этим идентификатором, но другие значения для этой строки не вставляются!

 $user_id = mysqli_insert_id($this->connection);

 $query = "INSERT INTO selections 
 (user_id, language_id, country_id, region_id, city_id, gender_id, age_id, category_id)
 VALUES ($user_id, 1, 1, 0, 0, 0, 20, 0)";

, поэтому вставляется user_id, но не другие значения (все они равны 0 в таблице). Я действительно проверил столбцы и удалил все внешние ключи для устранения этой проблемы. но я понятия не имею.

все столбцы INT. странная часть - когда я заменяю $ user_id на буквальное число, это работает, иногда нет. но строка всегда создается. и я проверил, что $ user_id является целым числом.

Я знаю, что это сложная проблема, и она может быть вызвана многими вещами, но я пытался решить эту крошечную проблему в течение 3 часов. было бы здорово, если бы кто-то дал мне что-то, что я мог бы сделать для устранения этой проблемы.

ОБНОВЛЕНИЕ: даже если я установил значения по умолчанию и просто вставил первый столбец (user_id), он не работает. любое другое поле равно 0. Так странно!

| selections | CREATE TABLE `selections` (
  `user_id` int(11) NOT NULL,
  `language_id` int(11) NOT NULL DEFAULT '1',
  `country_id` int(11) NOT NULL DEFAULT '1',
  `region_id` int(11) NOT NULL DEFAULT '0',
  `city_id` int(11) NOT NULL DEFAULT '0',
  `gender_id` int(11) NOT NULL DEFAULT '0',
  `age_id` int(11) NOT NULL DEFAULT '0',
  `category_id` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |


  $query = "INSERT INTO selections
        (user_id)
        VALUES ('$user_id')";

user_id показывает 178, а другие поля равны 0: (

UPDATE:

Это работало в командной строке sql. но не в php. но mysqli не выдал ошибку, и строка действительно была вставлена, но почему другие поля 0?

ОТВЕТ: Моя вина. у меня был скрипт jquery, который изменил его обратно на 0 0 0 0 0 0 0. На моей странице много AJAX, поэтому было сложно найти его ... извините, мой плохой!

Ответы [ 2 ]

4 голосов
/ 05 января 2010

Когда вы сталкиваетесь с подобными ситуациями, выведите запрос на экран перед его выполнением:

$query = "INSERT INTO ...";
echo $query

Попробуйте:

$query = "INSERT INTO selections 
            (user_id, language_id, country_id, region_id, city_id, gender_id, age_id, category_id)
          VALUES 
            ({$user_id}, 1, 1, 0, 0, 0, 20, 0)";

Вам нужно обернуть переменные PHP в {} при обращении к ним в строковых операторах SQL.

Используйте ограничения по умолчанию


Если у вас есть значения по умолчанию, вам не нужно устанавливать значения в инструкции INSERT:

INSERT INTO selections 
  (user_id)
VALUES 
  ({$user_id})

Ссылочная целостность


Вы получаете последний вставленный идентификатор и используете его при последующей вставке в другую таблицу, но у вас нет внешнего ключа, определенного в столбце user_id, чтобы гарантировать, что значение, входящее в этот столбец, действительно существует другой стол. Если вы предоставите имя таблицы и столбца, которые вы получаете для своего последнего идентификатора вставки, я предоставлю оператор ALTER TABLE .

1 голос
/ 05 января 2010
$query = "INSERT INTO selections 
(user_id, language_id, country_id, region_id, city_id, gender_id, age_id, category_id)
VALUES ('$user_id', 1, 1, 0, 0, 0, 20, 0)";

Одиночные кавычки вокруг $ user_id могут сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...