[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: выбрать из txt файла строки с определенным значени
Страницы: 1, 2, 3, 4, 5, 6
Guest
неожиданная ошибка!!! Подскажите!

При добавлении записи в таблицу mysql возникает ошибка:

НазначениеПлатежа=Комиссия за перечисление средств со счета '11122333377766298876' через систему Банка России для клиентов,

если убрать счет '23232...' то все добавляется. Менял типы полей text, tinytext, но ничего не меняется. Какой выход из данной ситуации?
Игорь_Vasinsky
покажи запрос целиком

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
F_Yuriy
<?php

$dbc = mysqli_connect('localhost', 'myuser', '111', 'mytest')
or die ('Невозможно подключиться к базе');

$file = file('kl_to_1c.txt');

foreach($file as $value){
if(substr_count($value, 'Плательщик1')>0){
$payer = explode("=", $value);
}

if(substr_count($value, 'Получатель1')>0){
$pay = explode("=", $value);
}

if(substr_count($value, 'НазначениеПлатежа')>0){
$details = explode("=", $value);
$query = "INSERT INTO summary (pay, paymen, details) VALUES ('$payer[1]', '$pay[1]', '$details[1]')";
mysqli_query($dbc, $query)
or die('Ошибка');
}
}
?>
F_Yuriy
Текстовый файл:
Плательщик1=ООО "Рога"
Получатель1=ООО "Копыта"
НазначениеПлатежа=Комиссия за перечисление средств со счета '11155667789900234857' через систему Банка России для клиентов, использующих электронный документооборот от 11/10/10 №№: 555, 6666, 8888, 9999
СтатусСоставителя=
Игорь_Vasinsky
Цитата
$query = "INSERT INTO summary (pay, paymen, details) VALUES ('$payer[1]', '$pay[1]', '$details[1]')";


ну потому что нужно экранировать данные и использовать конкатенацию.

INSERT INTO `summary` (`pay`, `paymen`, `details`) VALUES ('".mysql_real_escape_string($payer[1])."', '".mysql_real_escape_string$pay[1]."', '".mysql_real_escape_string$details[1]."'


а вообще mysql уже не поддерживается разработчиками и будет полностью выкинута из php

mysqli или PDO

+ я говорил - что запросы в циклах - это плохо.



_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
killer8080
F_Yuriy
откуда берется этот файл? Кто его создает? Если ты сам, то не страдай фигней, для это есть формат csv.
F_Yuriy
Цитата (killer8080 @ 18.12.2012 - 11:55)
F_Yuriy
откуда берется этот файл? Кто его создает? Если ты сам, то не страдай фигней, для это есть формат csv.

файл экспортируется с клиент-банка
F_Yuriy
Цитата (Игорь_Vasinsky @ 18.12.2012 - 11:54)
Цитата
$query = "INSERT INTO summary (pay, paymen, details) VALUES ('$payer[1]', '$pay[1]', '$details[1]')";


ну потому что нужно экранировать данные и использовать конкатенацию.

INSERT INTO `summary` (`pay`, `paymen`, `details`) VALUES ('".mysql_real_escape_string($payer[1])."', '".mysql_real_escape_string$pay[1]."', '".mysql_real_escape_string$details[1]."'


а вообще mysql уже не поддерживается разработчиками и будет полностью выкинута из php

mysqli или PDO

+ я говорил - что запросы в циклах - это плохо.

так это же mysqli
не работает по Вашему примеру
Игорь_Vasinsky
Цитата
mysql_real_escape_string


mysqli_real_escape_string


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
F_Yuriy
Цитата (Игорь_Vasinsky @ 18.12.2012 - 12:12)
Цитата
mysql_real_escape_string


mysqli_real_escape_string

Спасибо, все заработало! Вот такой итоговый запрос:

$query = "INSERT INTO summary (pay, paymen, details) VALUES ('".mysql_real_escape_string($payer[1])."', '".mysql_real_escape_string($pay[1])."$
mysqli_query($dbc, $query)
or die('Ошибка');
}

Скажите, ранее Вы сказали, что через цикл добавлять данные, плохая идея, а какая альтернатива?
F_Yuriy
mysqli_real_escape_string - пустые значения вставляет
Игорь_Vasinsky
потому что

mysqli_real_escape_string($link, .....)



_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
F_Yuriy
Цитата (Игорь_Vasinsky @ 18.12.2012 - 12:33)
потому что

mysqli_real_escape_string($link, .....)

поясните пожалуйста, что это значит?
Игорь_Vasinsky
это значит что 1й аргумент - это идентификатор подключения, а 2й это обрабатываемое значение

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
F_Yuriy
Цитата (Игорь_Vasinsky @ 18.12.2012 - 12:46)
это значит что 1й аргумент - это идентификатор подключения, а 2й это обрабатываемое значение

Я уже догадался! Но спасибо, за Ваше терпение и отзывчивость!
Итоговый код:
<?php
$dbc = mysqli_connect('localhost', 'myuser', '111', 'mytest')
or die ('Невозможно подключиться к базе');
$file = file('kl_to_1c.txt');

foreach($file as $value){
if(substr_count($value, 'Плательщик1')>0){
$payer = explode("=", $value);
}

if(substr_count($value, 'Получатель1')>0){
$pay = explode("=", $value);
}

if(substr_count($value, 'НазначениеПлатежа')>0){
$details = explode("=", $value);
$query = "INSERT INTO summary (pay, paymen, details) VALUES ('".mysqli_real_escape_string($dbc, $payer[1])."', '".mysqli_real_escape_string($d$
mysqli_query($dbc, $query)
or die('Ошибка');
}
}
?>

Не сильно кривой? Так вообще принято писать или надо оптимизировать?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.