PHP MySQL вставки сбрасывающих данных - PullRequest
0 голосов
/ 13 марта 2009

Хорошо, это новый для меня. В основном у меня есть таблица статей:

id: int auto increment
title: varchar(200)
description: varchar(1000)
ctext: longtext
chtml: longtext

Теперь я делаю вставку в эту таблицу с помощью mysql_query:

INSERT INTO articles
(title, description, ctext, chtml)
VALUES
('$title', '$description', '$text', '$html')

Все значения были переданы через mysql_escape_string ().

Текст и html здесь имеют размер примерно 50 КБ (поэтому я не могу опубликовать полный запрос здесь).

Теперь вот проблема: запрос работает. Новая строка вставлена. Однако столбцы ctext и chtml пусто . Это MySQL 5.0.51a и PHP 5.2.8. Насколько я могу судить, никаких ошибок не возникает.

Теперь я выгрузил запрос в файл в / tmp и запустил его с:

mysql -u username -p dbname < /tmp/query

То же самое.

Я копирую запрос в Navicat, и он ... работает.

Так что же происходит на земле?

Ответы [ 2 ]

2 голосов
/ 13 марта 2009

Несколько случайных мыслей:

  • Вы пытались контролировать длину текста, посмотрите, не сработает ли он только в одной точке?
  • Какую связь вы открываете? Какой драйвер?
  • Вы проверили кодировку вашего соединения? Некоторые недопустимые символы могут быть отправлены в.
  • Вы пытались использовать параметры вместо mysql_escape_string?
  • Вы пытались выполнить напрямую из того же файла из Navicat вместо копирования-вставки? Опять же, это может быть связано с недопустимым символом, который не был пропущен при копировании, но был сохранен в файле.
  • Просто чтобы охватить основы, которые мы так часто забываем, как вы проверяете, что данные не вставлены? Я имею в виду, как вы это визуализируете? Вы можете иметь разрыв строки, который скрывает первые строки от 2 из 3 средств визуализации. Просто длинный выстрел, но я видел, как это произошло.

Добавление : для соединений MySQL по умолчанию используется значение latin1, для передачи символов Юникода необходимо использовать что-то вроде mysql_query("SET NAMES 'utf8'").

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

Я не уверен, имеет ли это значение, но mysql_escape_string устарело и заменено на mysql_real_escape_string

Вы пробовали это с меньшим текстом?

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