Первый раз отправляю сообщения в StackOverflow, но я давно читал здесь комментарии.
Я столкнулся с программной ошибкой, которую не смог выяснить через несколько часов, и не смог найти ничего в вопросах и ответах, которые могли бы быть применимыми, так что вот мой первый пост!
Я использую PHP и MySQLi подготовленный оператор для вставки данных, которые происходят из файла, в базу данных и сохраняет каждую запись из файла в массив ($ dbData []), который передается функции, которая выполняет хранение базы данных. Я проверил значения массива для всех четырех индексов для каждой записи, и данные существуют во всех полях записи, хотя в некоторых строках есть много слешей (вперед и назад), апострофов, кавычек (одинарных и двойных) и HTML-тегов. содержание.
Массив $ dbData соответствует столбцам в таблице для вставки.
Таблица называется «содержимым», и она имеет ограничение на второй столбец, что она не может быть нулевой. Он называется «CText».
Код, который работает с массивом данных, находится в функции, которая вызывается в цикле для всех данных файла. Я предоставляю содержание функции ниже без интерфейса функции. Для упрощения я включил код, который соединяется с базой данных, но код, который фактически создает соединение с базой данных, находится вне функции.
$mysqli = new mysqli("example.com", "user", "password", "database");
...
$queryText = "insert into content values (?, ?, ?, ?)";
$query = mysqli->prepare($queryText);
$query->bind_param('dsds',$dbData[0],$dbData[1],$dbData[2],$dbData[3]);
if (!$query->execute()) {
echo '<br>Execute failed: (' . $query->errno . ') . $query->error;
echo '<br>dbData[1]: ' . $dbData[1];
}
Вставка работает для большинства данных записи $ dbData, но я получаю эту ошибку на некоторых записях:
Ошибка выполнения: (1048) Столбец ‘CText’ не может быть пустым
CText: {данные, напечатанные здесь, которые обрезаются после того, что кажется строкой, возвращаемой в содержимое строки}
Мой вопрос заключается в том, могут ли привязки иметь проблемы с определенными символами, такими как перевод строки / возврат каретки или какая-либо другая комбинация. Я не установил кодировку символов в коде, поэтому используется кодировка по умолчанию.
может ли связывание иметь проблемы с определенными символами, такими как перевод строки / возврат каретки или какая-либо другая комбинация.
Нет проблем с привязкой. Единственная причина для такого сообщения об ошибке — когда данные НУЛЬ.
Здесь идет простой контрольный список для решения всех подобных проблем.
Во всяком случае, если вы все еще думаете, что есть ошибка — создайте изолированный, повторяемый пример кода. Означает не просто создать неосуществимый набросок, чтобы показать читателям, но и полный рабочий пример, который каждый может воспроизвести. Такие как
$mysqli = new mysqli("example.com", "user", "password", "database");
$mysqli->query("CREATE TABLE content ...");
$queryText = "insert into content values (?, ?, ?, ?)";
$query = $mysqli->prepare($queryText);
$dbData[0] = 0;
$dbData[1] = 'some text that yo think is causing the error';
$dbData[2] = 0;
$dbData[3] = 'some another text';
$query->bind_param('dsds',$dbData[0],$dbData[1],$dbData[2],$dbData[3]);
if (!$query->execute()) {
echo '<br>Execute failed: (' . $query->errno . ') . $query->error;
echo '<br>dbData[1]: ' . $dbData[1];
}
без петель. без какого-либо кода, который не показан, но полный рабочий пример, который приводит к отмеченной ошибке.
После неудачи с таким примером, начните отлаживать ваш код, чтобы найти логическую ошибку в ходе выполнения программы или в том, как вы ее отлаживаете.
Вы должны понимать, что такого рода вопросы («у меня ошибка в PHP из-за чистого неба») не могут быть получены без воспроизводимого примера.
Других решений пока нет …