массив array записать в MySQL

Статус
В этой теме нельзя размещать новые ответы.
Делаю запрос
PHP:
db_query ("update exchange set wmz_wme=$wmz_wme, wmz_wmr=$wmz_wmr, wmz_wmu=$wmz_wmu, wmz_wmb=$wmz_wmb where exchanger='savechange'");

Только выдает ошибку
Call to undefined function db_query()

Добавлено через 2 минуты
Простите, мой косяк. Надо было mysql_query

Добавлено через 11 минут
PHP:
mysql_select_db($db);
mysql_query ('UPDATE exchange 
SET wmz_wme=$wmz_wme, wmz_wmr=$wmz_wmr, wmz_wmu=$wmz_wmu, wmz_wmb=$wmz_wmb 
WHERE exchanger="savechange"');

Как написать правильно, чтобы переменные добавились?

Извините, что задаю много глупых вопросов, просто создавая этот скрипт, я изучаю php.
 
PHP:
mysql_select_db($db);
mysql_query ("UPDATE exchange 
SET wmz_wme='$wmz_wme', wmz_wmr='$wmz_wmr', wmz_wmu='$wmz_wmu', wmz_wmb='$wmz_wmb'
WHERE exchanger='savechange'");
Хотя такой вариант топорный и совсем не защищен от SQL Injection

почитай про то, как кавычки меняют интерпретацию переменных в ней
 
Сделала я этот запрос, но данные в таблицу все равно не добавились.

Добавлено через 26 минут
Получилось только при запросе
PHP:
$query="UPDATE exchange 
     SET wmz_wme=".$wmz_wme.", wmz_wmr=".$wmz_wmr.", wmz_wmu=".$wmz_wmu.", wmz_wmb=".$wmz_wmb." 
     WHERE exchanger='savechange'";
mysql_query($query);
 
Сделала я этот запрос, но данные в таблицу все равно не добавились.

Добавлено через 26 минут
Получилось только при запросе
PHP:
$query="UPDATE exchange 
     SET wmz_wme=".$wmz_wme.", wmz_wmr=".$wmz_wmr.", wmz_wmu=".$wmz_wmu.", wmz_wmb=".$wmz_wmb." 
     WHERE exchanger='savechange'";
mysql_query($query);

для справки: синтаксически верно наименования таблиц и названия столбцов заключать вот в такую кавычку - "`" Ваш код будет таким:
PHP:
$query="UPDATE `exchange` 
     SET `wmz_wme`=".$wmz_wme.", `wmz_wmr`=".$wmz_wmr.", `wmz_wmu`=".$wmz_wmu.", `wmz_wmb`=".$wmz_wmb." 
     WHERE `exchanger`='savechange'";
mysql_query($query);
потому что в мускуле есть предопределенные значения полей и когда у вас будет (например) таблица с именем "keys", то фиг Вы в нее что-либо вставите без "`"
 
Делаю запрос к БД
PHP:
$query="update `exchange` 
set `wmu_wmz`=".$wmu_wmz.", `wmu_wmr`=".$wmu_wmr.", `wmu_wme`=".$wmu_wme.", `wmu_wmb`=".$wmu_wmb.", `wme_wmz`=".$wme_wmz.", `wme_wmr`=".$wme_wmr.", `wme_wmu`=".$wme_wmu." 
where `exchanger`='superchange'";
mysql_query($query);

Но данные в базе не появились.

Перед этим тоже делала запросы, они были успешны.
Пробовала mysql_free_result(), однако сервер выдает ошибку.

И еще вопрос
PHP:
$query="update `exchange` 
set `wmz_wmr`=".$wmz_wmr.", `wmz_wmu`=".$wmz_wmu.", `wmz_wme`=".$wmz_wme.", `wmz_wmb`=".$wmz_wmb.", `wmr_wmz`=".$wmr_wmz.", `wmr_wmu`=".$wmr_wmu.", `wmr_wme`=".$wmr_wme.",`wmu_wmz`=".$wmu_wmz.", `wmu_wmr`=".$wmu_wmr.", `wmu_wme`=".$wmu_wme.", `wmu_wmb`=".$wmu_wmb.", `wme_wmz`=".$wme_wmz.", `wme_wmr`=".$wme_wmr.", `wme_wmu`=".$wme_wmu.",`wme_wmb`=".$wme_wmb.", `wmb_wmz`=".$wmb_wmz.", `wmb_wmr`=".$wmb_wmr.", `wmb_wmu`=".$wmb_wmu.", `wmb_wme`=".$wmb_wme.",`wme_wmb`=".$wme_wmb.", `wmb_wmz`=".$wmb_wmz.", `wmb_wmr`=".$wmb_wmr.", `wmb_wmu`=".$wmb_wmu.", `wmb_wme`=".$wmb_wme." 
where `exchanger`='superchange'";
mysql_query($query);
Почему-то база не может обработать большой запрос, приходится разбивать на несколько частей. Почему так?
 
Делаю запрос к БД
Но данные в базе не появились.

Перед этим тоже делала запросы, они были успешны.
Пробовала mysql_free_result(), однако сервер выдает ошибку.

PHP:
$query="update `exchange` 
set `wmu_wmz`=".$wmu_wmz.", `wmu_wmr`=".$wmu_wmr.", `wmu_wme`=".$wmu_wme.", `wmu_wmb`=".$wmu_wmb.", `wme_wmz`=".$wme_wmz.", `wme_wmr`=".$wme_wmr.", `wme_wmu`=".$wme_wmu." 
where `exchanger`='superchange'";
echo "query=$query<br>";
mysql_query($query);
echo mysql_errno() . ': ' . mysql_error(). '<br>';

что выводится на экран?


И еще вопрос
Почему-то база не может обработать большой запрос, приходится разбивать на несколько частей. Почему так?

PHP:
$query="update `exchange` 
set `wmz_wmr`=".$wmz_wmr.", `wmz_wmu`=".$wmz_wmu.", `wmz_wme`=".$wmz_wme.", `wmz_wmb`=".$wmz_wmb.", `wmr_wmz`=".$wmr_wmz.", `wmr_wmu`=".$wmr_wmu.", `wmr_wme`=".$wmr_wme.",`wmu_wmz`=".$wmu_wmz.", `wmu_wmr`=".$wmu_wmr.", `wmu_wme`=".$wmu_wme.", `wmu_wmb`=".$wmu_wmb.", `wme_wmz`=".$wme_wmz.", `wme_wmr`=".$wme_wmr.", `wme_wmu`=".$wme_wmu.",`wme_wmb`=".$wme_wmb.", `wmb_wmz`=".$wmb_wmz.", `wmb_wmr`=".$wmb_wmr.", `wmb_wmu`=".$wmb_wmu.", `wmb_wme`=".$wmb_wme.",`wme_wmb`=".$wme_wmb.", `wmb_wmz`=".$wmb_wmz.", `wmb_wmr`=".$wmb_wmr.", `wmb_wmu`=".$wmb_wmu.", `wmb_wme`=".$wmb_wme." 
where `exchanger`='superchange'";
echo "query=$query<br>";
mysql_query($query);
echo mysql_errno() . ': ' . mysql_error(). '<br>';

аналогично, что выводится на экран?
 
На мой взгляд удобнее пользоваться функциями jik в 11 посте
а массив создавать вот так
PHP:
$pattern="#(WM[A-Z] -> WM[A-Z]): rate=([\.0-9]*)#" ;
preg_match_all($pattern, $content, $cur_arr);

for($i=0;$i<count($cur_arr[0]);$i++)
{$wm=str_replace(" -> ","_",$cur_arr[1][$i]);
$obmen[$wm]=$cur_arr[2][$i];

}
если какие то не нужны
PHP:
unset($obmen["wmz_wmz"])

ну а полный код выглядит примерно вот так (мб где ошибся)
PHP:
function db_connect($server = DB_SERVER, $username = DB_USER, $password = DB_PASS, $database = DB_NAME, $link = 'db_link') { 
  global $$link; 
  if (USE_PCONNECT == 'true') { 
    $$link = mysql_pconnect($server, $username, $password); 
  } else { 
    $$link = mysql_connect($server, $username, $password); 
  } 
  if ($$link) mysql_select_db($database); 
  return $$link; 
} 

function db_array_to_mysql($table, $data, $action = 'insert', $parameters = '', $link = 'db_link') { 
  global $$link; 
  reset($data); 
  if ($action == 'insert') { 
    $query = 'insert into ' . $table . ' ('; 
    while (list($columns, ) = each($data)) { 
      $query .= $columns . ', '; 
    } 
    $query = substr($query, 0, -2) . ') values ('; 
    reset($data); 
    while (list(, $value) = each($data)) { 
      switch ((string)$value) { 
        case 'now()': 
          $query .= 'now(), '; 
          break; 
        case 'null': 
          $query .= 'null, '; 
          break; 
        default: 
          $query .= '\'' . addslashes($value) . '\', '; 
          break; 
      } 
    } 
    $query = substr($query, 0, -2) . ')'; 
  } elseif ($action == 'update') { 
    $query = 'update ' . $table . ' set '; 
    while (list($columns, $value) = each($data)) { 
      switch ((string)$value) { 
        case 'now()': 
          $query .= $columns . ' = now(), '; 
          break; 
        case 'null': 
          $query .= $columns .= ' = null, '; 
          break; 
        default: 
          $query .= $columns . ' = \'' . addslashes($value) . '\', '; 
          break; 
      } 
    } 
    $query = substr($query, 0, -2) . ' where ' . $parameters; 
  } 
  return mysql_query($query, $$link); 
} 


/////////http://www.savechange.ru/index.php///////// 

$_url = 'http://www.savechange.ru/savechange_c.php'; 

   $ch = curl_init(); 

   curl_setopt($ch, CURLOPT_POST,1); 
   curl_setopt($ch, CURLOPT_URL,$_url); 
   curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
   $content = curl_exec ($ch); 

   curl_close ($ch);    
     
///// 
unset ($cur_arr); 
unset ($curs_arr); 
//// 
$pattern="#(WM[A-Z] -> WM[A-Z]): rate=([\.0-9]*)#" ;
preg_match_all($pattern, $content, $cur_arr);

for($i=0;$i<count($cur_arr[0]);$i++)
{$wm=str_replace(" -> ","_",$cur_arr[1][$i]);
$sql_data_array[$wm]=$cur_arr[2][$i];
}

db_connect();

//добавляем данные
$sql_data_array['exchanger'] = 'savechange';
db_array_to_mysql('exchange', $sql_data_array); 

//изменяем данные
db_array_to_mysql('exchange', $sql_data_array, 'update', "exchanger = 'savechange'");
 
PHP:
$query="update `exchange` 
set `wmu_wmz`=".$wmu_wmz.", `wmu_wmr`=".$wmu_wmr.", `wmu_wme`=".$wmu_wme.", `wmu_wmb`=".$wmu_wmb.", `wme_wmz`=".$wme_wmz.", `wme_wmr`=".$wme_wmr.", `wme_wmu`=".$wme_wmu." 
where `exchanger`='superchange'";
echo "query=$query<br>";
mysql_query($query);
echo mysql_errno() . ': ' . mysql_error(). '<br>';

что выводится на экран?

1064: 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 ' `wmz_wmu`=, `wmz_wme`=, `wmz_wmb`=, `wmr_wmz`=, `wmr_wmu`=, `wmr_wme`= WHERE `e' at line 1
 
С запросом к БД разобралась, там надо было экранировать \"
 
На мой взгляд удобнее пользоваться функциями jik в 11 посте
а массив создавать вот так
PHP:
$pattern="#(WM[A-Z] -> WM[A-Z]): rate=([\.0-9]*)#" ;
preg_match_all($pattern, $content, $cur_arr);

for($i=0;$i<count($cur_arr[0]);$i++)
{$wm=str_replace(" -> ","_",$cur_arr[1][$i]);
$obmen[$wm]=$cur_arr[2][$i];

Я думаю это рациональное решение, чем я делала. Спасибо!

$pattern хотелось бы не только wm, в других файлах экспорта встречаются rbk, yandex и др. в точно таком же формате.
Какое regex будет в данном случае?
Например, Для просмотра ссылки Войди или Зарегистрируйся
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху