SQLite3 :: exe c (): нераспознанный токен: «Дата» - PullRequest
0 голосов
/ 10 января 2020

Я получаю сообщение об ошибке SQLite3::exec(): unrecognized token: "'Date", когда вставляю команду в базу данных SQLite. Если у меня есть команды SQL, которые повторяются и выполняются через консоль, это также работает. Данные для этого поступают из базы данных dbase. Если я введу строку для имени поля, команды вставки будут работать.

$field=unpack( "a11fieldname/A1fieldtype/Voffset/Cfieldlen/Cfielddec", substr($buf,0,18));
$db = new SQLite3('databases/test.db');
$sqlCode .= "INSERT INTO HEADER (name) VALUES ('".$field['fieldname']."');";
$db-> exec($sqlCode);

1 Ответ

0 голосов
/ 10 января 2020

Было бы намного проще в использовании подготовить заполнение против sql инъекций

Если я введу строку для имени поля, команды вставки будут работать

, убедитесь, что имя поля представляет собой текстовое значение

Я использую pdo:

$sqlCode = "INSERT INTO header VALUES (:name)";
$query = $db->prepare($sqlCode);
$query->bindValue(':name', $field['fieldname'], SQLITE3_TEXT);   

$result = $query->execute();

РЕДАКТИРОВАТЬ: Ошибка говорит о нераспознанном токене Дата , поэтому, если имя поля дата, которую вам может потребоваться изменить SQLITE3_TEXT на SQLITE3_BLOB ИЛИ SQLITE3_INTEGER Обычно не требуется .

Но вам нужно вставить дату в столбец date, а не в name столбец

РЕДАКТИРОВАТЬ 2: это немного сложно.

См. здесь для полного описания формата файла dbf. Поэтому было бы лучше, если бы вы могли использовать библиотеку для чтения и записи файлов dbf.

Если вам действительно нужно сделать это самостоятельно, вот самые важные части:

  • Dbf - это двоичный формат файла, поэтому вам нужно прочитать и записать его как двоичный файл . Например, количество записей хранится в 32-разрядном целом числе, которое может содержать ноль байтов.
  • Вы не можете использовать строковые функции для этих двоичных данных . Например, strlen() будет сканировать данные до первого нулевого байта, который присутствует в этом 32-разрядном целом числе, и вернет неправильное значение.
  • Если вы разбили файл (записи), вы ' Придется скорректировать количество записей в заголовке.
  • При разбиении записей помните, что каждой записи предшествует дополнительный байт, пробел 0x20, если запись не удалена, звездочка 0x2A если запись удалена. (например, если у вас есть 4 поля по 10 байт, длина каждой записи будет равна 41) - это значение также доступно в заголовке: bytes 10-11 - 16-bit number - Number of bytes in the record. (Least significant byte first)
  • Файл может заканчиваться концом -file marker 0x1A, поэтому вам также необходимо проверить это.

См. вопрос: двоичная безопасная запись в файл с php для создания файла DBF

Final Word : вам нужна библиотека DBF Структура заголовка файла данных

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