база данных — PHP MySQLi подготовил оператор привязки ошибок для определенных символов?

Первый раз отправляю сообщения в 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: {данные, напечатанные здесь, которые обрезаются после того, что кажется строкой, возвращаемой в содержимое строки}

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

0

Решение

может ли связывание иметь проблемы с определенными символами, такими как перевод строки / возврат каретки или какая-либо другая комбинация.

Нет проблем с привязкой. Единственная причина для такого сообщения об ошибке — когда данные НУЛЬ.

Здесь идет простой контрольный список для решения всех подобных проблем.

  1. Доверяй своим глазам. Вы не являетесь единственным пользователем подготовленных заявлений mysqli. Их миллионы, и никто еще не сталкивался с такой проблемой. Означает, что если база данных сообщает, что значение не может быть нулевым, тогда значение IS равно нулю.
  2. Во всяком случае, если вы все еще думаете, что есть ошибка — создайте изолированный, повторяемый пример кода. Означает не просто создать неосуществимый набросок, чтобы показать читателям, но и полный рабочий пример, который каждый может воспроизвести. Такие как

    $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];
    }
    

    без петель. без какого-либо кода, который не показан, но полный рабочий пример, который приводит к отмеченной ошибке.

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

Вы должны понимать, что такого рода вопросы («у меня ошибка в PHP из-за чистого неба») не могут быть получены без воспроизводимого примера.

2

Другие решения

Других решений пока нет …