неожиданная ошибка!!! Подскажите!
При добавлении записи в таблицу mysql возникает ошибка:
НазначениеПлатежа=Комиссия за перечисление средств со счета '11122333377766298876' через систему Банка России для клиентов,
если убрать счет '23232...' то все добавляется. Менял типы полей text, tinytext, но ничего не меняется. Какой выход из данной ситуации?
Игорь_Vasinsky
18.12.2012 - 11:45
покажи запрос целиком
_____________
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
18.12.2012 - 11:47
<?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
18.12.2012 - 11:50
Текстовый файл:
Плательщик1=ООО "Рога"
Получатель1=ООО "Копыта"
НазначениеПлатежа=Комиссия за перечисление средств со счета '11155667789900234857' через систему Банка России для клиентов, использующих электронный документооборот от 11/10/10 №№: 555, 6666, 8888, 9999
СтатусСоставителя=
Игорь_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 уже не поддерживается разработчиками и будет полностью выкинута из
phpmysqli или 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
18.12.2012 - 11:55
F_Yuriy
откуда берется этот файл? Кто его создает? Если ты сам, то не страдай фигней, для это есть формат csv.
F_Yuriy
18.12.2012 - 12:00
Цитата (killer8080 @ 18.12.2012 - 11:55) |
F_Yuriy откуда берется этот файл? Кто его создает? Если ты сам, то не страдай фигней, для это есть формат csv. |
файл экспортируется с клиент-банка
F_Yuriy
18.12.2012 - 12:06
Цитата (Игорь_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 уже не поддерживается разработчиками и будет полностью выкинута из phpmysqli или PDO + я говорил - что запросы в циклах - это плохо. |
так это же mysqli
не работает по Вашему примеру
Игорь_Vasinsky
18.12.2012 - 12:12
Цитата |
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
18.12.2012 - 12:23
Цитата (Игорь_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
18.12.2012 - 12:32
mysqli_real_escape_string - пустые значения вставляет
Игорь_Vasinsky
18.12.2012 - 12:33
потому что
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
18.12.2012 - 12:37
Цитата (Игорь_Vasinsky @ 18.12.2012 - 12:33) |
потому что
mysqli_real_escape_string($link, .....) |
поясните пожалуйста, что это значит?
Игорь_Vasinsky
18.12.2012 - 12:46
это значит что 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
18.12.2012 - 12:56
Цитата (Игорь_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('Ошибка');
}
}
?>
Не сильно кривой? Так вообще принято писать или надо оптимизировать?
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.