Недавно зіткнувся з дивним глюком.
Є база MySQL, в базі таблиця, в таблиці поле типу LONGTEXT.
З даними виконуються маніпуляції за допомогою скрипта на PHP.
Поки використовував функції mysql процедурного стилю, працювало нормально. Потім перейшов на бібліотеку mysqli.
Запити виду
$mysqli->query("select `somefield` from `table` where `field`='value'");
також виконуються нормально.
Але задля убезпечення від SQL-ін’єкцій краще використовувати техніку наперед заготовлених виразів (prepared statements). Використовується ця техніка таким чином.
$sql = "select `somefield` from `table` where `field`=?";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param('s', 'value');
$stmt->execute();
$stmt->bind_result($somevar);
while ($stmt->fetch()) {
echo nl2br("$somevar\n");
}
Так от, поле таблиці типу LONGTEXT чомусь не передається у змінну $somevar таким скриптом.
Змінив тип поля на TEXT, тоді запрацювало гарно. Розміру тексту в 64 КБайти поки вистачає :)