блин... я гоню, извините создало 84 sql файла и в каждом записана цифра 1 а нет.. нашёл несколько в которых ничего нет, пустые
Код (PHP): <?php error_reporting(E_ALL | E_STRICT) ; ini_set('display_errors','On'); set_time_limit(20); $host = "localhost"; $user = "root"; $password = ""; // Производим попытку подключения к серверу MySQL: if (!mysql_connect($host, $user, $password)){ echo "<h2>MySQL Error!</h2>"; exit; } // Выбираем базу данных: $db = 'forever'; mysql_select_db($db); function fdump( $data ){ $fn = './'.microtime(true).'.sql'; $f = fopen( $fn, 'wb' ); fwrite( $f, $data ); fclose( $f ); } $dsntd = "DSN=TECDOC_CD_1_2013;Database=TECDOC_CD_1_2013;Server=localhost;Port=;UID=tecdoc;PWD=tcd_error_0"; $id = odbc_connect($dsntd, "", ""); echo $id; echo odbc_tables($id); $res = odbc_exec($id, "SELECT * FROM TOF_BRANDS"); //Создаём таблицу с полями, если не существует mysql_query("CREATE TABLE IF NOT EXISTS `TOF_BRANDS_1`( `BRA_ID` smallint(6) NOT NULL, `BRA_BRAND` varchar(25) NOT NULL, `BRA_MF_NR` integer(11) NOT NULL ) ENGINE=InnoDB"); $data = array(); $i = 0; while($r = odbc_fetch_array($res)) { //$data[] = "('{$r['ARL_ART_ID']}', '{$r['ARL_SEARCH_NUMBER']}', '{$r['ARL_BRA_ID']}', '{$r['ARL_DISPLAY_NR']}')"; $data[] = "('{$r['BRA_ID']}', '{$r['BRA_BRAND']}','{$r['BRA_MF_NR']}')"; ++$i; if($i > 100) { //$sql = 'INSERT INTO `tof_art_lookup` (`ARL_ART_ID`, `ARL_SEARCH_NUMBER`, `ARL_BRA_ID`, `ARL_DISPLAY_NR`) VALUES ' . implode(', ', $data); $sql = mysql_query('INSERT INTO `tof_brands_1` (`BRA_ID`, `BRA_BRAND`, `BRA_MF_NR`) VALUES ' . join(', ', $data)); echo $sql; fdump($sql); mysql_query($sql) or exit('Запрос:<br>' . $sql . '<br>Ошибка:<br>' . mysql_error()); $i = 0; $data = array(); } } if(sizeof($data)) { echo '<pre>'; //var_dump($data); echo '</pre>'; $sql = mysql_query('INSERT INTO `tof_brands_1` (`BRA_ID`, `BRA_BRAND`, `BRA_MF_NR`) VALUES ' . join(', ', $data)); } if ($sql == 'true'){ echo "<p>Обновление БД прошло успешно!</p> "; }else{ echo "<p>Не удалось обновить записи в БД</p> "; } echo mysql_errno(); echo mysql_error(); //*********************************** ?>
да блин Код (Text): $sql = mysql_query('INSERT INTO `tof_brands_1` (`BRA_ID`, `BRA_BRAND`, `BRA_MF_NR`) VALUES ' . join(', ', $data)); echo $sql; fdump($sql); ты понимаешь что ты дампишь? =)))))))))) Добавлено спустя 4 минуты 1 секунду: замени этот кусок Код (Text): $sql = mysql_query('INSERT INTO `tof_brands_1` (`BRA_ID`, `BRA_BRAND`, `BRA_MF_NR`) VALUES ' . join(', ', $data)); echo $sql; fdump($sql); mysql_query($sql) or exit('Запрос:<br>' . $sql . '<br>Ошибка:<br>' . mysql_error()); на Код (Text): $query = 'INSERT INTO `tof_brands_1` (`BRA_ID`, `BRA_BRAND`, `BRA_MF_NR`) VALUES ' . join(', ', $data); $result = mysql_query($query); fdump("результат:\n\r".print_r($result,true)."\n\r\n\r\n\rЗапрос:\n\r".$query); это вообще что: Код (Text): $sql = mysql_query [...] mysql_query($sql)
блин))) ну ты записываешь результат выполнения функции. ясен хрен что либо 1 либо пусто))) ман по функции глянь. Код (PHP): while($r = odbc_fetch_array($res)) { $data[] = "('{$r['ARL_ART_ID']}', '{$r['ARL_SEARCH_NUMBER']}', '{$r['ARL_BRA_ID']}', '{$r['ARL_DISPLAY_NR']}')"; #$data[] = "('{$r['BRA_ID']}', '{$r['BRA_BRAND']}','{$r['BRA_MF_NR']}')"; ++$i; if($i > 100) { $sql = 'INSERT INTO `tof_art_lookup` (`ARL_ART_ID`, `ARL_SEARCH_NUMBER`, `ARL_BRA_ID`, `ARL_DISPLAY_NR`) VALUES ' . implode(', ', $data); #$sql = mysql_query('INSERT INTO `tof_brands_1` (`BRA_ID`, `BRA_BRAND`, `BRA_MF_NR`) VALUES ' . join(', ', $data)); #echo $sql; fdump($sql); mysql_query($sql) or exit('Запрос:<br>' . $sql . '<br>Ошибка:<br>' . mysql_error()); $i = 0; $data = array(); } }
Код (PHP): <?php error_reporting(E_ALL | E_STRICT) ; ini_set('display_errors','On'); set_time_limit(20); $host = "localhost"; $user = "root"; $password = ""; // Производим попытку подключения к серверу MySQL: if (!mysql_connect($host, $user, $password)){ echo "<h2>MySQL Error!</h2>"; exit; } // Выбираем базу данных: $db = 'forever'; mysql_select_db($db); function fdump( $data ){ $fn = './'.microtime(true).'.sql'; $f = fopen( $fn, 'wb' ); fwrite( $f, $data ); fclose( $f ); } $dsntd = "DSN=TECDOC_CD_1_2013;Database=TECDOC_CD_1_2013;Server=localhost;Port=;UID=tecdoc;PWD=tcd_error_0"; $id = odbc_connect($dsntd, "", ""); echo $id; echo odbc_tables($id); $res = odbc_exec($id, "SELECT * FROM TOF_BRANDS"); //Создаём таблицу с полями, если не существует mysql_query("CREATE TABLE IF NOT EXISTS `TOF_BRANDS_1`( `BRA_ID` smallint(6) NOT NULL, `BRA_BRAND` varchar(25) NOT NULL, `BRA_MF_NR` integer(11) NOT NULL ) ENGINE=InnoDB"); $data = array(); $i = 0; while($r = odbc_fetch_array($res)) { //$data[] = "('{$r['ARL_ART_ID']}', '{$r['ARL_SEARCH_NUMBER']}', '{$r['ARL_BRA_ID']}', '{$r['ARL_DISPLAY_NR']}')"; $data[] = "('{$r['BRA_ID']}', '{$r['BRA_BRAND']}','{$r['BRA_MF_NR']}')"; ++$i; if($i > 50) { $sql = 'INSERT INTO `tof_brands_1` (`BRA_ID`, `BRA_BRAND`, `BRA_MF_NR`) VALUES ' . implode(', ', $data); fdump( $sql ); mysql_query($sql) or exit('Запрос:<br>' . $sql . '<br>Ошибка:<br>' . mysql_error()); $i = 0; $data = array(); } } if(sizeof($data)) { echo '<pre>'; //var_dump($data); echo '</pre>'; $sql = mysql_query('INSERT INTO `tof_brands_1` (`BRA_ID`, `BRA_BRAND`, `BRA_MF_NR`) VALUES ' . join(', ', $data)); } if ($sql == 'true'){ echo "<p>Обновление БД прошло успешно!</p> "; }else{ echo "<p>Не удалось обновить записи в БД</p> "; } echo mysql_errno(); echo mysql_error(); //*********************************** ?> исправил вот что выводит Код (Text): Resource id #4Resource id #5Запрос: INSERT INTO `tof_brands_1` (`BRA_ID`, `BRA_BRAND`, `BRA_MF_NR`) VALUES ('871', 'KOGEL','839'), ('872', 'LANZ+MARTI','840'), ('873', 'LANDTECH. SCHONEBECK','841'), ('874', 'LEXUS','842'), ('875', 'MCW','843'), ('876', 'MDW','844'), ('877', 'MEGA','845'), ('878', 'MENARINI','846'), ('879', 'MOWAG','847'), ('880', 'NOOTEBOOM','848'), ('881', 'OPTARE','849'), ('882', 'PLYMOUTH','850'), ('883', 'PREMIER','851'), ('884', 'PREVOST','852'), ('885', 'RABA','853'), ('886', 'RENDERS','854'), ('887', 'ROCKWELL','855'), ('888', 'SAF','856'), ('889', 'SHANGHAI','857'), ('890', 'SPIERINGS KRANEN','858'), ('891', 'STILL','859'), ('892', 'TERBERG-BENSCHOP','860'), ('893', 'TVR','861'), ('894', 'VME','862'), ('895', 'ZF Parts','863'), ('896', 'VW-PORSCHE','864'), ('897', 'BERKHOF','865'), ('898', 'ALPINA','866'), ('899', 'BACHMANN','867'), ('900', 'FRIWEG','868'), ('901', 'GFP','869'), ('902', 'HILLMANN','870'), ('903', 'KKK','871'), ('904', 'NEDCAR','872'), ('905', 'REMPLOY LTD','873'), ('906', 'SEMEX','874'), ('907', 'ASIA MOTORS','879'), ('908', 'PUMA','880'), ('909', 'ASTON MARTIN','881'), ('910', 'JEEP','882'), ('911', 'IW LUDWIGSFELDE','883'), ('912', 'ARDENAISSE D'ESSIEUX','884'), ('913', 'BPW','885'), ('914', 'CALABRESE','886'), ('915', 'CARDI','887'), ('916', 'CARRIMORE','888'), ('917', 'CASTARA','889'), ('918', 'CAZENAVE','890'), ('919', 'CODER','891'), ('920', 'COLAERT','892'), ('921', 'DORSEY','893') Ошибка: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ESSIEUX','884'), ('913', 'BPW','885'), ('914', 'CALABRESE','886'), ('915', 'CARD' at line 1
('912', 'ARDENAISSE D'ESSIEUX','884'), сказал же что кавычка рвет. почему не делается mysql_real_escape_string()???
Аллилуйя! теперь ты видишь ГДЕ ОШИБКАТОЙОПТА?! =) Добавлено спустя 38 секунд: не пали малину, пусть сам ищет! удали! удали! =)
да ладно тебе, человек несколько дней пытается пофиксить. очевидно же что у него нет синдрома никитоса)))
блин =( Добавлено спустя 30 секунд: теперь мы не узнаем, нашел ли он её сам, и ли только с твоей подсказки.
Код (PHP): <?php set_time_limit(0); $host='localhost'; $user='root'; $password=''; $dsntd='DSN=TECDOC2013;Database=TECDOC_CD_1_2013;Server=localhost;Port=;UID=tecdoc;PWD=tcd_error_0'; if(!$mysql=mysql_connect($host,$user,$password)) { exit('<h2>MySQL Error '.mysql_error($mysql).'!</h2>'); } else if(!mysql_select_db($db,$mysql)) { exit('<h2>MySQL Error '.mysql_error($mysql).'!</h2>'); } else if(!$odbc=odbc_connect($dsntd,'','')) { exit('<h2>ODBC Error: '.odbc_error($odbc).'</h2>'); } else if($res=odbc_exec($odbc,"SELECT * FROM `TOF_ART_LOOKUP`")) { $i=0; $data=array(); echo nl2br($odbc.' '.odbc_tables($odbc)); function escape($string) { if($string) { global $mysql; return mysql_real_escape_string($string,$mysql); } } mysql_query("CREATE TABLE IF NOT EXISTS `TOF_ART_LOOKUP`( `ARL_ART_ID` integer(11) NOT NULL, `ARL_SEARCH_NUMBER` varchar(25) NOT NULL, `ARL_BRA_ID` smallint(6) NOT NULL, `ARL_DISPLAY_NR` varchar(30) NOT NULL ) ENGINE=InnoDB",$mysql); while($r=odbc_fetch_array($res)) { $data[]="('".escape($r['ARL_ART_ID'])."','".escape($r['ARL_SEARCH_NUMBER'])."','".espcape($r['ARL_BRA_ID'])."','".escape($r['ARL_DISPLAY_NR'])."')"; ++$i; if(3000<$i) { mysql_query('INSERT INTO `tof_art_lookup` (`ARL_ART_ID`,`ARL_SEARCH_NUMBER`,`ARL_BRA_ID`,`ARL_DISPLAY_NR`) VALUES '.join(',',$data),$mysql); $i=0; $data=array(); } } if(sizeof($data)) { mysql_query('INSERT INTO `tof_art_lookup` (`ARL_ART_ID`,`ARL_SEARCH_NUMBER`,`ARL_BRA_ID`,`ARL_DISPLAY_NR`) VALUES '.join(',',$data),$mysql); } } ?> odbc_fetch_row должна работать быстрее odbc_fetch_array. Попробуйте расставить столбцы по числовому ключу: $r[0] - $r[1] - $r[10] и т. д. то есть по счету столбики идут... Мож еще VIEW представление ускорит, кто знает?)) Ну и собственно TRIGGER'ы
аааа!!! да!да!да!да!да убил кавычку! Код (PHP): $r['BRA_BRAND'] = str_replace("'", "", $r['BRA_BRAND']); спасибо!
мдя... $r['BRA_BRAND'] = mysql_real_escape_string( $r['BRA_BRAND'] ) - кавычка остается но становится безопасной для запроса. и не только кавычка...
да, так и сделал, спасибо! Маленькая база выгрузилась вся! теперь пробую большую на 37 миллионов строк
Можно как-то еще оптимизировать этот скрипт? У меня максимум 30000 записей в минуту с буфером в і=10000.
Может кинет кто-нибудь последнюю версию исходного кода, а то 4 страницы и куча модификаций, боюсь чего не перепутать. зы: код с хабры от экспорте у мну работает крайне медленно, вот думаю может этот мне поможет )