Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проблема с записью в БД
 
 автор: Softic   (15.01.2010 в 11:17)   письмо автору
 
 

вот структура БД:

CREATE TABLE IF NOT EXISTS `auto_100` ( 
  `id` int(11) NOT NULL auto_increment, 
  `company` varchar(30) NOT NULL, 
  `price` varchar(20) NOT NULL, 
  `change` varchar(20) NOT NULL, 
  `perc_change` varchar(20) NOT NULL, 
  `volume` varchar(20) NOT NULL, 
  `time` datetime default NULL, 
  PRIMARY KEY  (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; 



пытаюсь записать в БД следующим запросом выше полученный массив, подскажите что не так?

<? php  
$sql 
"INSERT INTO (`auto_100`  
,`company`  
,`price`  
,`change`  
,`perc_change`  
,`volume`  
,`time` 
) VALUES"


mysql_query($sql ('".$result[1]."''".$result[2]."''".
$result[3]."'
'".$result[4]."''".$result[5]."''".
$result[6])."'
)) or die("Error in $sql : ".mysql_error());  

?>


пишет следующее: F
atal error: Call to undefined function INSERT INTO (`ftse_100` ,`company` ,`price` ,`change` ,`perc_change` ,
`volume` ,`time` ) VALUES() in 
/var/www/dmitrii/data/www/fx-inform.ru/scripts/
copy_indeces.php on line 63

  Ответить  
 
 автор: Softic   (15.01.2010 в 11:19)   письмо автору
 
   для: Softic   (15.01.2010 в 11:17)
 

А это структура моего массива:

Array 

    [0] => Array 
        ( 
            [0] => avtogir GROUP PLC284.803.801.35570,55405:42 
            [1] => AUTTOMOBILLE GROUP1,174.0011.000.9540,54905:36 
            [2] => ARG AUT929.508.500.9283,78505:38 
            [3] => AUTO TRUST333.302.000.6071,65405:42 
            [4] => ANGLO AUTO2,774.5023.500.851,176,22505:42 
            [5] => AUTO FAGASTA1,022.0022.002.20802,43505:42 
            [6] => AUTO BRIT875.5016.001.862,595,92005:42 
        ) 

    [1] => Array 
        ( 
            [0] => avtogir GROUP PLC 
            [1] => AUTTOMOBILLE GROUP 
            [2] => ARG AUT 
            [3] => AUTO TRUST 
            [4] => ANGLO AUTO 
            [5] => AUTO FAGASTA 
            [6] => AUTO BRIT 
        ) 

    [2] => Array 
        ( 
            [0] => 284.80 
            [1] => 1,174.00 
            [2] => 929.50 
            [3] => 333.30 
            [4] => 2,774.50 
            [5] => 1,022.00 
            [6] => 875.50 
        ) 

    [3] => Array 
        ( 
            [0] => 3.80 
            [1] => 11.00 
            [2] => 8.50 
            [3] => 2.00 
            [4] => 23.50 
            [5] => 22.00 
            [6] => 16.00 
        ) 

    [4] => Array 
        ( 
            [0] => 1.35 
            [1] => 0.95 
            [2] => 0.92 
            [3] => 0.60 
            [4] => 0.85 
            [5] => 2.20 
            [6] => 1.86 
        ) 

    [5] => Array 
        ( 
            [0] => 570,554 
            [1] => 40,549 
            [2] => 83,785 
            [3] => 71,654 
            [4] => 1,176,225 
            [5] => 802,435 
            [6] => 2,595,920 
        ) 

    [6] => Array 
        ( 
            [0] => 05:42 
            [1] => 05:36 
            [2] => 05:38 
            [3] => 05:42 
            [4] => 05:42 
            [5] => 05:42 
            [6] => 05:42 
        ) 

)

  Ответить  
 
 автор: Softic   (20.01.2010 в 00:05)   письмо автору
 
   для: Softic   (15.01.2010 в 11:19)
 

-

  Ответить  
 
 автор: root   (15.01.2010 в 11:27)   письмо автору
 
   для: Softic   (15.01.2010 в 11:17)
 

INSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...)

  Ответить  
 
 автор: Trianon   (15.01.2010 в 11:46)   письмо автору
 
   для: Softic   (15.01.2010 в 11:17)
 

перепишите вызов следующим образом.

<?
$sql 
= ....;

if(!
mysql_query($sql))
    die(
"error on request:<br>$sql <br>".mysql_error());


Любые изменения вносите только в строку $sql = ...
последние две строки должны остаться без изменений

  Ответить  
 
 автор: SofTic   (17.01.2010 в 16:13)   письмо автору
 
   для: Trianon   (15.01.2010 в 11:46)
 

Объясните пожалуйста в чем заключается ошибка, перепробовал все варианты кавычек и точек по краям переменных?

Ошибка:
Parse error: syntax error, unexpected T_STRING in /var/www/........./ins.php on line 42

код:

<? php 

include("config.php");
$sql "INSERT INTO 'auto_100' ('id', 'company', 'price', 
'change', 'perc_change', 'volume', 'time')"
;  
if(!
mysql_query($sqlVALUES ('12','$result[1]','$result[2]',
'$result[3]','$result[4]','$result[5]','$result[6]'))
 or die(
"error on request:<br>$sql <br>".mysql_error()); //<= 42 строка - ошибка

?>

  Ответить  
 
 автор: heed   (17.01.2010 в 16:40)   письмо автору
 
   для: SofTic   (17.01.2010 в 16:13)
 

> if(!mysql_query($sql) VALUES (

константы VALUES в php нет
наверное имелось ввиду

$sql .= " VALUES ( .........
без всяких if(!mysql_query($sql)

  Ответить  
 
 автор: Trianon   (17.01.2010 в 19:07)   письмо автору
 
   для: SofTic   (17.01.2010 в 16:13)
 

У меня в прошлом посте была такая фраза "последние две строки должны остаться без изменений".
Вот эти вот:
if(!mysql_query($sql))
    die("error on request:<br>$sql <br>".mysql_error());

Вы их меняете. И спрашиваете у меня совета.
Какой ответ Вы ждете?

  Ответить  
 
 автор: Softic   (18.01.2010 в 07:05)   письмо автору
 
   для: Trianon   (17.01.2010 в 19:07)
 

дело в том что я пробовал ваш вариант только вставлял как одну строку, тоже неполучилось. только затем начал экспериментировать.
теперь выдает следующую ошибку:

error on request:
INSERT INTO auto_100 (id, company, price, change, 
perc_change, volume, time) VALUES ('0','Array[0]',
'Array[0]','Array[0]','Array[0]','Array[0]','Array[0]') 
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 'change, perc_change, volume,
 time) VALUES ('0','Array[0]','Array[0]','Array[0]',' at
 line 1



<?php 
include("config.php");

$sql "INSERT INTO auto_100 (id, company, price, change,
 perc_change, volume, time) VALUES ('0','
$result[1]
[0]','
$result[2][0]','$result[3][0]','$result[4]
[0]','
$result[5][0]','$result[6][0]')"
if(!
mysql_query($sql)) 
    die(
"error on request:<br>$sql <br>".mysql_error());
?> 

  Ответить  
 
 автор: t3ma   (18.01.2010 в 10:31)   письмо автору
 
   для: Softic   (18.01.2010 в 07:05)
 

вам же уже сказали выше

вот рабочий код:


<?php  
include("config.php"); 

$sql "INSERT INTO auto_100 (id, company, price, change, perc_change, volume, time) VALUE ('0','$result[1][0]','$result[2][0]','$result[3][0]','$result[4][0]','$result[5][0]','$result[6][0]')";  
if(!
mysql_query($sql))  
    die(
"error on request:<br>$sql <br>".mysql_error()); 
?> 

  Ответить  
 
 автор: Softic   (18.01.2010 в 17:11)   письмо автору
 
   для: t3ma   (18.01.2010 в 10:31)
 

И чем же этот ваш рабочий код отличается от моего нерабочего??

  Ответить  
 
 автор: Trianon   (18.01.2010 в 19:09)   письмо автору
 
   для: Softic   (18.01.2010 в 07:05)
 

В языке php внутрь строк подставляются переменные. Элементы массивов - это несколько более сложные штуки, они тоже подставляются, но нужно явно указывать контекст подстановки {$result[[1][0]}
Так или иначе, прямая подстановка значений в строку SQL без предварительного экранирования mysql_real_escape_string() - всё равно ошибка. помещайте значения в переменные, экранируйте их, потом подставляйте. Будет хорошо.

  Ответить  
 
 автор: Softic   (18.01.2010 в 21:26)   письмо автору
 
   для: Trianon   (18.01.2010 в 19:09)
 

Теперь у меня добавилось вот какая ошибочка, совсем непонятно причем тут доступ запрещен?? о_ О

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'www-data'@'localhost' (using password: NO) in /var/www...../sql_4.php on line 38

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /var/www...../sql_4.php on line 38


Я всего лишь дописал след. строки дабы испробвать Ваш совет.


<? php 
$escaped_result_1 
mysql_real_escape_string($result[3][2]);
printf ("Escaped string: "$escaped_result_1);
?>

  Ответить  
 
 автор: Trianon   (18.01.2010 в 21:30)   письмо автору
 
   для: Softic   (18.01.2010 в 21:26)
 

функция mysql_real_escape_string действует только при установленном соединении с сервером MySQL.

  Ответить  
 
 автор: Softic   (18.01.2010 в 21:33)   письмо автору
 
   для: Trianon   (18.01.2010 в 21:30)
 

Спасибо, уже сам нашел свою ошибку =)

  Ответить  
 
 автор: Softic   (18.01.2010 в 22:01)   письмо автору
 
   для: Trianon   (18.01.2010 в 21:30)
 

уважаемый Trianon

сделал следующее:

<? php
$escaped_result_1 
mysql_real_escape_string($result[1][1]);
$escaped_result_2 mysql_real_escape_string($result[2][1]);
$escaped_result_3 mysql_real_escape_string($result[3][1]);
$escaped_result_4 mysql_real_escape_string($result[4][1]);
$escaped_result_5 mysql_real_escape_string($result[5][1]);
$escaped_result_6 mysql_real_escape_string($result[6][1]);
?>

Что опять не так, быть может у меня поля таблицы не того вида,?
error on request:
INSERT INTO auto_100 (id, company, price, change, 
perc_change, volume, time) VALUE ('0','U[1]',
'1[1]','0[1]','[1]','9[1]','[1]') 
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 'change, perc_change, volume, time) 
VALUE ('0','U[1]','1[1]','0[1]','[1]','9[1]',' at line 1

  Ответить  
 
 автор: Trianon   (18.01.2010 в 23:24)   письмо автору
 
   для: Softic   (18.01.2010 в 21:26)
 

change - зарезервированное слово языка.
Имя таблицы, столбца, поля нужно взять в такие вот `кавычки`.
В принципе, так можно обрамлять любые имена, но те, которые совпадают по написанию с зарезервированными словами, обрамлять нужно обязательно.
Итак
INSERT INTO `auto_100` (`id`, `company`, `price`, `change`,  
и т.д.

Список зарезервированных слов можно посмотреть в мануале
http://dev.mysql.com/doc/refman/5.0/en/reserved-words.html

  Ответить  
 
 автор: Softic   (19.01.2010 в 10:11)   письмо автору
 
   для: Trianon   (18.01.2010 в 23:24)
 

Изменил переменные и названия полей в таблице, однако снова ошибка
Больше никаких зарезервированных слов в запросе нет, проверил по вашей ссылке.

error on request: 
INSERT INTO 'auto_100' ('id', 'company', 'price',
 'izmenenie', 'perc_izmenenie', 'volume', 'time')
 VALUE ('0','U[1]','1[1]','0[1]','[1]','9[1]','[1]') 
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 ''ftse_100' ('id', 'company', 
'price', 'izmenenie', 'perc_izmenenie', 'volume', '' at 
line 1


Причем если я убираю обрамление из кавычек у названия таблицы, т.е. просто: auto_100
то ошибка становится след. вида:
error on request:
INSERT INTO auto_100 ('id', 'company', 'price', 
'izmenenie', 'perc_izmenenie', 'volume', 'time') VALUE 
('0','U[1]','1[1]','0[1]','[1]','9[1]','[1]')
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 ''id', 'company', 'price',
 'izmenenie', 'perc_izmenenie', 'volume', 'time') 
VALUE' at line 1


Привожу еще раз структуру таблицы:

CREATE TABLE IF NOT EXISTS `auto_100` (
  `id` int(11) NOT NULL auto_increment,
  `company` varchar(30) NOT NULL,
  `price` varchar(20) NOT NULL,
  `izmenenie` varchar(30) NOT NULL,
  `perc_izmenenie` varchar(20) NOT NULL,
  `volume` varchar(20) NOT NULL,
  `time` datetime default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

  Ответить  
 
 автор: Softic   (19.01.2010 в 10:22)   письмо автору
 
   для: Softic   (19.01.2010 в 10:11)
 

Сделал такой запрос, все заработало:

<?php 
$sql 
"INSERT INTO auto_100 (id, company, price,
 izmenenie, perc_izmenenie, volume, time) VALUE 
('0','
$escaped_result_1[1][1]','$escaped_result_2[2][1]',
'
$escaped_result_3[3][1]','$escaped_result_4[4][1]',
'
$escaped_result_5[5][1]','$escaped_result_6[6][1]')";   
?>


Однако в базу записались такие значения:
<?php 
INSERT INTO 
`auto_100` (`id`, `company`, `price`, 
`
izmenenie`, `perc_izmenenie`, `volume`, `time`) 
VALUES
(1'U[1]''1[1]''0[1]''[1]''9[1]''0000-00-00 00:00:00'),
(
2'U[1]''1[1]''0[1]''[1]''9[1]''0000-00-00 00:00:00'),
(
3'U[1]''1[1]''0[1]''[1]''9[1]''0000-00-00 00:00:00');
?>


Что я делаю не так, почему не записываются значения из массива?

  Ответить  
 
 автор: Softic   (19.01.2010 в 10:28)   письмо автору
 
   для: Softic   (19.01.2010 в 10:22)
 

Сам ступил, зачем то в запросе оставил у переменных скобки от массива ...[1][1]
Теперь все заработало!

Вопрос, как сделать мой неуклюжий код более динамическим, то есть чтобы при его запуске все доступные данные с массива записывались в базу? А не как сейчас у меня только определенные строки.
код:


<?php 
preg_match_all
("/<a.*>(.*)<\/a>.*<td ".
"align=\"right\" width=\"10%\">(.*)<\/td>.*\"changeup\">".
"(.*)<\/span><\/td>.*\"changeup\">(.*)<\/span><\/td><td".
" align=\"right\" width=\"20%\">(.*)<\/td>.*<td align=".
"\"right\" width=\"15%\">(.*)<\/td>/"$text$result); 

include(
"config.php");

$escaped_result_1 mysql_real_escape_string($result[1][1]);
$escaped_result_2 mysql_real_escape_string($result[2][1]);
$escaped_result_3 mysql_real_escape_string($result[3][1]);
$escaped_result_4 mysql_real_escape_string($result[4][1]);
$escaped_result_5 mysql_real_escape_string($result[5][1]);
$escaped_result_6 mysql_real_escape_string($result[6][1]);
//printf ("Escaped string: %s\n", $escaped_result_2);

$sql "INSERT INTO auto_100 (id, company, price,
 izmenenie, perc_izmenenie, volume, time) VALUE 
('0','
$escaped_result_1','$escaped_result_2',
'
$escaped_result_3','$escaped_result_4',
\'
$escaped_result_5','$escaped_result_6')";   
if(!
mysql_query($sql))   
    die(
"error on request:<br>$sql <br>".mysql_error()); 
?>

  Ответить  
 
 автор: Softic   (19.01.2010 в 11:12)   письмо автору
 
   для: Softic   (19.01.2010 в 10:28)
 

Поискал на форуме, уяснил чти для записи многомерного массива используется оператор foreach()
поробовал применить след. конструкцию, но естественно с первого раза ничего невышло, подскажите что не так?


include("config.php");

foreach($result as $row)  
{  
    $q_auto = array();  
    foreach($row as $col)  
        $q_auto[] = "'".mysql_real_escape_string($col)."'"; 
    $q_auto = '('.implode(',', $q_auto).')';

}

$sql = "INSERT INTO auto_100 (id, company, price, izmenenie, perc_izmenenie, volume, time) VALUES ";   
if(!mysql_query($sql.$q_auto))   
    die("error on request:<br>$sql <br>".mysql_error());  

?>


выдает след. ошибку:

error on request:
INSERT INTO auto_100 (id, company, price, izmenenie, perc_izmenenie, volume, time) VALUES
Duplicate entry '5' for key 1

  Ответить  
 
 автор: Trianon   (20.01.2010 в 00:24)   письмо автору
 
   для: Softic   (19.01.2010 в 11:12)
 

>if(!mysql_query($sql.$q_auto))
Что это???!
Я Вам сказал не менять эту строку.
Сказал не один раз. Сказал не просто так, а потому что любое её изменение, в конечном итоге будет приводить к диагностикам, которые будут Вас запутывать.

Почему Вы не слушаете, что Вам говорят?

[Исправлено автором.
Из поста было вычеркнуто значительное количество внезапно возникших идиоматических выражений.]

  Ответить  
 
 автор: Softic   (20.01.2010 в 01:01)   письмо автору
 
   для: Trianon   (20.01.2010 в 00:24)
 

это была моя попытка изобрести велосипед =)

Trianon после этого я много чего перебробовал, вашу строку я неменяю, в самом низу страницы я описал текущую свою проблему =)

  Ответить  
 
 автор: Trianon   (20.01.2010 в 08:49)   письмо автору
 
   для: Softic   (20.01.2010 в 01:01)
 

Как это не меняете? А кто внутрь нее символы .$q_auto пририсовал?
В экспериментах и изобретениях Вы никак не ограничены: поледеятельности перед этими строками - всё в Вашем распоряжении.

  Ответить  
 
 автор: Лена   (19.01.2010 в 10:23)   письмо автору
 
   для: Softic   (19.01.2010 в 10:11)
 

В первом запросе не VALUE, а VALUES.
Как у Вас заработало с VALUE?

  Ответить  
 
 автор: Softic   (19.01.2010 в 10:32)   письмо автору
 
   для: Лена   (19.01.2010 в 10:23)
 

Сейчас проверил VALUES тоже работает, вообщем похоже нет разницы VALUE или VALUES, хотя не знаю, но у меня работает в обоих случаях.

  Ответить  
 
 автор: Лена   (19.01.2010 в 10:55)   письмо автору
 
   для: Softic   (19.01.2010 в 10:32)
 


INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name [(col_name,...)]
    {VALUES | VALUE} ({expr | DEFAULT},...),(...),...
    [ ON DUPLICATE KEY UPDATE
      col_name=expr
        [, col_name=expr] ... ]

Получается, что можно и так, и так. Только непонятно, в каких случаях лучше VALUE, а в каких VALUES

  Ответить  
 
 автор: Softic   (19.01.2010 в 11:14)   письмо автору
 
   для: Лена   (19.01.2010 в 10:55)
 

Поискал на форуме, уяснил чти для записи многомерного массива используется оператор foreach()
поробовал применить след. конструкцию, но естественно с первого раза ничего невышло, подскажите что не так?

<? php
include("config.php");
foreach(
$result as $row)  
{  
    
$q_auto = array();  
    foreach(
$row as $col)  
        
$q_auto[] = "'".mysql_real_escape_string($col)."'"
    
$q_auto '('.implode(','$q_auto).')';
}

$sql "INSERT INTO auto_100 (id, company, price, izmenenie, perc_izmenenie, volume, time) VALUES ";   
if(!
mysql_query($sql.$q_auto))   
    die(
"error on request:<br>$sql <br>".mysql_error());  

?>


выдает след. ошибку:
error on request:
INSERT INTO auto_100 (id, company, price, izmenenie, perc_izmenenie, volume, time) VALUES 
Duplicate entry '5' for key 1


хотя в базу кое-что записывается, но в след. виде:

INSERT INTO `auto_100` (`id`, `company`, `price`, `izmenenie`, `perc_izmenenie`, `volume`, `time`) VALUES
(290, '<a class="blue" HREF="/pasa/za', '<a class="blue" HREF', '<a class="blue" HREF="/pasa/za', '<a class="blue" HREF', '<a class="blue" HREF', '0000-00-00 00:00:00'),
(291, 'AUTTOMOBILLE GROUP', 'ARG AUT', 'AUTO TRUST', 'ANGLO AUTO', 'AUTO FAGASTA', '0000-00-00 00:00:00'),
(292, '<a class="blue" HREF="/pasa/za', '<a class="blue" HREF', '<a class="blue" HREF="/pasa/za', '<a class="blue" HREF', '<a class="blue" HREF', '0000-00-00 00:00:00'),
(293, 'AUTTOMOBILLE GROUP', 'ARG AUT', 'AUTO TRUST', 'ANGLO AUTO', 'AUTO FAGASTA', '0000-00-00 00:00:00');


Получается в столбцы записываются данные из этого массива:

 [1] => Array  
        (  
            [0] => avtogir GROUP PLC  
            [1] => AUTTOMOBILLE GROUP  
            [2] => ARG AUT  
            [3] => AUTO TRUST  
            [4] => ANGLO AUTO  
            [5] => AUTO FAGASTA  
            [6] => AUTO BRIT  
        ) 

А нужно чтобы записывались данные из каждого массива в свой определенный столбец, помогите пожалуйста.

  Ответить  
 
 автор: Лена   (19.01.2010 в 16:44)   письмо автору
 
   для: Softic   (19.01.2010 в 11:14)
 


<?php
$arr 
= array(0=>
array(
'avtogir GROUP PLC284.803.801.35570,55405:42','
AUTTOMOBILLE GROUP1,174.0011.000.9540,54905:36'
,
'ARG AUT929.508.500.9283,78505:38 '),
1=>array('avtogir GROUP PLC','AUTTOMOBILLE GROUP','ARG AUT'));

for(
$i=0;$i<count($arr[0]);$i++){
    
$company $arr[0][$i];
    
$price $arr[1][$i];
$sql "INSERT INTO auto_100(company,price) VALUES('$company','$price')";
    
$get_page mysql_query($sql);
    if(!
$get_page) exit("Error in " $sql mysql_error());
}
?>


Может, не самое оптимальное решение... Но думать дольше нет времени.
Остальные поля в базе делайте по аналогии.

  Ответить  
 
 автор: Softic   (19.01.2010 в 16:53)   письмо автору
 
   для: Лена   (19.01.2010 в 16:44)
 

Спасибо конечно, но мне это решение не подойдет, так как я привел лишь часть массива, он может быть больше, и значения будут соответственно все другие, нужна какая-то хитрая переборка, а вот какая?
Trianon, снова помогите.

  Ответить  
 
 автор: Лена   (19.01.2010 в 17:21)   письмо автору
 
   для: Softic   (19.01.2010 в 16:53)
 

Как это часть массива? Объясните, а то ни Trianon, ни другие не поймут.
В первом посте у вас массив состоит из шести элементов, которые в свою очередь тоже являются массивами.
У вас шесть полей в базе. В каждое из этих полей вам циклом нужно складывать значения одного элемента-массива, напр. значения $arr[0] -
идут в поле price, $arr[1] идут в company и т.д .
Теперь вы говорите, что вы привели часть массива. Если у вас будет больше элементов, значит, и в базе должно быть больше полей -
чтобы было куда складывать данные, которые вы здесь не привели.
Хорошо. Дополните еще ваш массив, допустим, еще двумя элементами. И покажите здесь.
В базе полей только шесть+ одно для id, а в массиве у вас уже 8 элементов. В какие поля вы будете складывать те два элемента,
которые добавили?

  Ответить  
 
 автор: Softic   (19.01.2010 в 17:48)   письмо автору
 
   для: Лена   (19.01.2010 в 17:21)
 

Нет, я наверное неправильно выразился, всмысле в каждом массиве может быть больше самих значений, самих элементов останется столько же, это: company, price, izmenenie, perc_izmenenie, volume, time
То есть мне нужно чтобы в поля базы заносились все значения каждого из массивов, независимо сколько их там будет, по 3 в каждом массиве, или по 30. вот собственно

  Ответить  
 
 автор: Softic   (20.01.2010 в 00:06)   письмо автору
 
   для: Softic   (19.01.2010 в 17:48)
 

Попытался изменить запрос след. образом:

<? php
include("config.php");
foreach(
$result as $row)  
{  
    
$q_auto = array();  
    foreach(
$row as $col)  
        
$q_auto[] = "'".mysql_escape_string($col)."'"
    
$q_auto '('.implode(',',$q_auto).')';
}
$sql "INSERT INTO auto_100 (id, company, price,
 izmenenie, perc_izmenenie, volume, time) VALUES 
('0','
$q_auto[1]','$q_auto[2]','$q_auto[3]','$q_auto[4]',
'
$q_auto[5]','$q_auto[6]')";   
if(!
mysql_query($sql))   
    die(
"error on request:<br>$sql <br>".mysql_error());  
?>


выходит следующая ошибка:

error on request:
INSERT INTO auto_100 (id, company, price, izmenenie, 
perc_izmenenie, volume, time) VALUES 
('0',''','0','5',':','4','2') 
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 '0','5',':','4','2')' at line 1

немогу понять как при помощи implode() разделить значения в массиве, то есть четко отделить каждое значение друг от друга?

  Ответить  
 
 автор: Trianon   (20.01.2010 в 08:58)   письмо автору
 
   для: Softic   (20.01.2010 в 00:06)
 

>немогу понять как при помощи implode() разделить значения в массиве, то есть четко отделить каждое значение друг от друга?

implode не делит значения в массиве.
Наоборот, implode объединяет массив в одну строку.
Показали бы, что за массив. Массивы разные бывают. Что за значения? Какого типа?

  Ответить  
 
 автор: Softic   (20.01.2010 в 11:32)   письмо автору
 
   для: Trianon   (20.01.2010 в 08:58)
 

Вот структура массива:


Array  
(  
    [0] => Array  
        (  
            [0] => avtogir GROUP PLC284.803.801.35570,55405:42  
            [1] => AUTTOMOBILLE GROUP1,174.0011.000.9540,54905:36  
            [2] => ARG AUT929.508.500.9283,78505:38  
            [3] => AUTO TRUST333.302.000.6071,65405:42  
            [4] => ANGLO AUTO2,774.5023.500.851,176,22505:42  
            [5] => AUTO FAGASTA1,022.0022.002.20802,43505:42  
            [6] => AUTO BRIT875.5016.001.862,595,92005:42  
        )  

    [1] => Array  
        (  
            [0] => avtogir GROUP PLC  
            [1] => AUTTOMOBILLE GROUP  
            [2] => ARG AUT  
            [3] => AUTO TRUST  
            [4] => ANGLO AUTO  
            [5] => AUTO FAGASTA  
            [6] => AUTO BRIT  
        )  

    [2] => Array  
        (  
            [0] => 284.80  
            [1] => 1,174.00  
            [2] => 929.50  
            [3] => 333.30  
            [4] => 2,774.50  
            [5] => 1,022.00  
            [6] => 875.50  
        )  

    [3] => Array  
        (  
            [0] => 3.80  
            [1] => 11.00  
            [2] => 8.50  
            [3] => 2.00  
            [4] => 23.50  
            [5] => 22.00  
            [6] => 16.00  
        )  

    [4] => Array  
        (  
            [0] => 1.35  
            [1] => 0.95  
            [2] => 0.92  
            [3] => 0.60  
            [4] => 0.85  
            [5] => 2.20  
            [6] => 1.86  
        )  

    [5] => Array  
        (  
            [0] => 570,554  
            [1] => 40,549  
            [2] => 83,785  
            [3] => 71,654  
            [4] => 1,176,225  
            [5] => 802,435  
            [6] => 2,595,920  
        )  

    [6] => Array  
        (  
            [0] => 05:42  
            [1] => 05:36  
            [2] => 05:38  
            [3] => 05:42  
            [4] => 05:42  
            [5] => 05:42  
            [6] => 05:42  
        )  

)

  Ответить  
 
 автор: Trianon   (20.01.2010 в 12:19)   письмо автору
 
   для: Softic   (20.01.2010 в 11:32)
 

теперь поменяйте две пресловутые строки на строку echо $sql;

  Ответить  
 
 автор: Softic   (20.01.2010 в 19:40)   письмо автору
 
   для: Trianon   (20.01.2010 в 12:19)
 

Немогу понять, какие строки заменить на echo $sql ??

Вот весь код:

<?php

preg_match_all
("/<a.*>(.*)<\/a>.*<td align=\"right\" width=\"10%\">(.*)<\/td>.*\"changeup\">(.*)<\/span><\/td>.*\"changeup\">(.*)<\/span><\/td><td align=\"right\" width=\"20%\">(.*)<\/td>.*<td align=\"right\" width=\"15%\">(.*)<\/td>/"$text$result); 

include(
"config.php");

foreach(
$result as $row)  
{  
    
$q_auto = array();  
    foreach(
$row as $col)  
    
$q_auto[] = "'".mysql_escape_string($col)."'"
    
$q_auto '('.implode(',',$q_auto).')';

}

$sql "INSERT INTO auto_100 (id, company, price, izmenenie, perc_izmenenie, volume, time) VALUES ('0','$q_auto[1]','$q_auto[2]','$q_auto[3]','$q_auto[4]','$q_auto[5]','$q_auto[6]')";   
if(!
mysql_query($sql))   
    die(
"error on request:<br>$sql <br>".mysql_error());  
echo (
$sql); // выдает след. результат
?>

echo ($sql) =>
INSERT INTO auto_100 (id, company, price, izmenenie, perc_izmenenie, volume, time) VALUES ('0',''','0','5',':','4','2')error on request:

  Ответить  
 
 автор: Softic   (21.01.2010 в 20:42)   письмо автору
 
   для: Softic   (20.01.2010 в 19:40)
 

Быть может кто-нибудь что-то подскажет??

  Ответить  
 
 автор: Trianon   (21.01.2010 в 23:14)   письмо автору
 
   для: Softic   (20.01.2010 в 19:40)
 

Ну вот. Вы заменили исполнение запроса на его вывод на экран.
Теперь можете отлаживать скрипт, добиваясь того, чтобы он создавал именно нужный Вам запрос.
А не абы какой.

  Ответить  
 
 автор: Softic   (21.01.2010 в 23:23)   письмо автору
 
   для: Trianon   (21.01.2010 в 23:14)
 

Ну это то понятно что запрос у меня состоит непонятно из чего, а как разделить все значения массива меж собой и потом выстроить их через запятую в одну строку?
соединить в одну строку как вы уже сказали можно с помощью implode(), а вот как разделить все значения массива меж собой ??

  Ответить  
 
 автор: Trianon   (21.01.2010 в 23:58)   письмо автору
 
   для: Softic   (21.01.2010 в 23:23)
 

>соединить в одну строку как вы уже сказали можно с помощью implode(), а вот как разделить все значения массива меж собой ??

В смысле - как?
В массиве все значения разделены.
Обратиться к каждому можно по его индексу - по номеру элемента в массиве.

>Ну это то понятно что запрос у меня состоит непонятно из чего, а как разделить все значения массива меж собой и потом выстроить их через запятую в одну строку?

Вы посмотрите на него - у Вас там значения разве не через запятую идут?

  Ответить  
 
 автор: Softic   (22.01.2010 в 00:29)   письмо автору
 
   для: Trianon   (21.01.2010 в 23:58)
 

Хорошо, спрошу по другому, как мне осуществить запись этого многомерного массива за один проход, ечли обращаться к каждому элементу массива и подставлять их в запрос все работает, но с такими темпами легче в базу вбивать вручную.
Почитал форум, понял что делается это при помощи foreach(), но как??

  Ответить  
 
 автор: Trianon   (22.01.2010 в 01:36)   письмо автору
 
   для: Softic   (22.01.2010 в 00:29)
 

Что я могу сказать... по ссылке ниже несколько тем с моими ответами, где в цикле формируется текст SQL-операторов INSERT.

http://softtime.ru/forum/srch.php?name=Trianon+foreach+insert&numberthemes=30&srchwhere=2&id_forum=3&logic=1

  Ответить  
 
 автор: Trianon   (22.01.2010 в 09:27)   письмо автору
 
   для: Softic   (22.01.2010 в 00:29)
 

"Этот" многомерный массив для выбранной Вами цели стоило бы получить транспонированным.
У функции preg_match_all имеется такая возможность.

  Ответить  
 
 автор: Softic   (24.01.2010 в 00:43)   письмо автору
 
   для: Trianon   (22.01.2010 в 09:27)
 

<? php
include("config.php");

$table 'auto_100';
function 
myInsert($table$result

    
$sql "INSERT INTO `auto_100` "
    
$sep '(id, company, price, izmenenie, perc_izmenenie, volume, time'
    
$val ") VALUES "
    foreach(
$result AS $key => $elem
    { 
        
$sql .= "$sep `$key`"
        
$val .= "$sep '".mysql_escape_string($elem)."'"
        
$sep ','
    } 
    
$sql .= "$val)"
if(!
mysql_query($sql))   
    die(
"error on request:<br>$sql <br>".mysql_error());  

?>


Никаких ошибок невыдает, но и в базу ничего непишеться, что я натворил?

  Ответить  
 
 автор: Softic   (24.01.2010 в 01:19)   письмо автору
 
   для: Softic   (24.01.2010 в 00:43)
 

Пока сделал след. образом, все работает, но хотелось бы услышать слово профи, каким образом все таки лучше сделать формирование запроса в базу? незнаю правильно ли я выразился ...

<? php
include("config.php");
$kol_strok count($result);
for(
$i=0;$i<$kol_strok;$i++)
        {
        
$x1=$result[1][$i];
        
$x2=$result[2][$i];
        
$x3=$result[3][$i];
        
$x4=$result[4][$i];
        
$x5=$result[5][$i];
        
$x6=$result[6][$i];

$sql "INSERT INTO auto_100 (id, company, price, izmenenie, perc_izmenenie, volume, time) VALUES ('0', '$x1', '$x2', '$x3', '$x4', '$x5', '$x6')";
if(!
mysql_query($sql))   
    die(
"error on request:<br>$sql <br>".mysql_error());  
}
?>

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования