У вас есть два решения:
- Вы не можете использовать первую строку вашего
.dat
файла - Я полагаю, вы читаете его построчно ...
- Я так, просто не используйте первую строку (вы можете использовать переменную в качестве счетчика, чтобы узнать, находитесь ли вы в первой строке или нет)
- ИлиВы можете проверить, содержит ли текущая строка только целые числа / числа, прежде чем вставлять данные в базу данных.
Вот часть кода, которая может служить отправной точкой, если вы выберетеВторое решение:
if (in_numeric($data[0]) && is_numeric($data[1]) && is_numeric($data[2])) {
$sql_qry = "INSERT INTO DatTable (DF_PARTY_ID,DF_PARTY_CODE,DF_CONNECTION_ID)
VALUES ('$data[0]','$data[1]','$data[2]')";
$stmt = $this->connection->prepare($sql_qry);
$stmt->execute();
$this->checkForErrors($stmt);
}
Также обратите внимание, что вы используете prepare
и execute
, которые, кажется, указывают на то, что вы пытаетесь использовать подготовленные операторы.
При использованииподготовленные заявления, вы не должны делать то, что делаете;вам следует:
- Один и только один раз: подготовить инструкцию, используя заполнители для данных
- Для каждой строки свяжите значения
Не следует:
- Подготовить оператор для каждой строки
- Вставлять данные в запрос SQL вместос использованием заполнителей.
Это означает, что ваш код должен выглядеть примерно так (не проверено, поэтому вам, возможно, придется изменить несколько вещей) :
// First, prepare the statement, using placeholders
$query = "INSERT INTO DatTable (DF_PARTY_ID,DF_PARTY_CODE,DF_CONNECTION_ID)
VALUES (:party_id, :party_code, :connection_id)";
$stmt = $this->connection->prepare($query);
if (in_numeric($data[0]) && is_numeric($data[1]) && is_numeric($data[2])) {
// Then, for each line : bind the parameters
$stmt->bindValue(':party_id', $data[0], PDO::PARAM_INT);
$stmt->bindValue(':party_code', $data[1], PDO::PARAM_INT);
$stmt->bindValue(':connection_id', $data[2], PDO::PARAM_INT);
// And execute the statement
$stmt->execute();
$this->checkForErrors($stmt);
}