Объясните странное поведение INSERT в mysql_query?

Здравствуйте!

Пилю я тут 1 проект и встала такая задача: «Получить от пользователя строку с хеш-тегами через запятую и записать их по 1 в таблицу БД. Таблица содержит всего 2 столбца: ident и hash_tag. Ident — идентификатор того, к чему относятся хеш-теги, ну а hash_tag — это каждый отдельный хеш-тег»

Я написал скрипт:

$idea_hash = "слово1, слово2, слово3";
$idea_count = 3


$mass = explode(',', $idea_hash);

foreach($mass as $n)

	{

mysql_query("INSERT INTO hashes (ident, hash_tag) VALUES('$idea_count','$n')");

	}


Но при запуске в БД записывается только 1 слово из всех:

3 — слово1

Хотя я бы хотел видеть 3 строки:

3 — слово1
3 — слово2
3 — слово3

При этом цикл явно обрабатывается корректно. Но на 2 и 3 — ем шаге в базу почему-то ничего не записывается.
  • Вопрос задан
  • 3685 просмотров
Решения вопроса 1
Таблица пустая? hash_tag не уникален случайно?
1. Для отладки сделайте
mysql_query("INSERT INTO hashes (ident, hash_tag) VALUES('$idea_count','$n')") or die(mysql_error());

2. У вас будет очень много тегов? Зачем дублировать данные еще и текстовые? Не легче ли создать еще одну связную таблицу с самими тегами, а в основной прописывать ident, hash_tag_ident?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
KEKSOV
@KEKSOV
А часом у Вас на поле ident нет ли уникального индекса? А то Вы записываете три записи с одинаковым значением $idea_count — в вашем случае 3.

Надеюсь приведенный фрагмент кода это просто тест, а не кусок из вашего проекта? В противном случае это одно большое отверстие в безопасности сайта ;) Переходите на использование mysqli и prepared выражений. Это резко повысит скорость выполнения запросов и избавит проект от большого числа проблем с безопасностью.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы