Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Создание запроса в цикле
oleg_n  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 71
Пользователь №: 32089
На форуме: 4 года, 7 месяцев, 28 дней
Карма:

Не курю:
21 год, 11 месяцев, 8 дней


Пытаюсь освоить общение с MySQL и подружить его с ПХП :rolleyes: Но столкнулся с синтаксической проблемой - никак не могу правильно составить запрос, чтобы MySQL меня не отругал :lol: Подскажите плз. :rolleyes:
Собственно в чем суть вопроса - необходимо добавить в таблицу энное количество строк, которые находятся в массиве.
Сейчас у меня все работает, но как мне кажется с излишним обращением к БД:
foreach ($result3 as $key => $value) 
{
mysqlQuery("INSERT INTO `". IRB_DBPREFIX ."news_tags` (`id`, `id_news`, `id_tags`) VALUES (NULL,'".$GET['id']."', '".$key."')" );
}

Где $result3 - это массив с данными для записи, а mysqlQuery это функция подключения к БД. Т.е. в моем случае, каждый проход цикла, происходит инициализация обращения к БД через mysql_connect, и я так понимаю, что это не совсем правильно :)
Как я мыслю - нужно в этом цикле запихнуть в переменную нужное количество строк, а потом один раз подключиться к БД. Типа такого:

foreach ($result3 as $key => $value) {
$sql.= "INSERT INTO `". NOG_DBPREFIX ."news_tags` (`id`, `id_news`, `id_tags`) VALUES (NULL,'".$GET['id']."', '".$key."');\n";

);


}
mysqlQuery($sgl);

Но браузер ругается ERROR 1065 Query was empty, хотя в переменной $sgl содержится запись
INSERT INTO `nog_news_tags` (`id`, `id_news`, `id_tags`) VALUES (NULL,'2', '6'); 
INSERT INTO `nog_news_tags` (`id`, `id_news`, `id_tags`) VALUES (NULL,'2', '5');
INSERT INTO `nog_news_tags` (`id`, `id_news`, `id_tags`) VALUES (NULL,'2', '4');

Подскажите пожалуйста, в чем моя ошибка?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
oleg_n  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 71
Пользователь №: 32089
На форуме: 4 года, 7 месяцев, 28 дней
Карма:

Не курю:
21 год, 11 месяцев, 8 дней


Поскольку мне так и не удалось создать многострочный запрос с одним обращением к БД, то я заменил ИРБИСовскую функцию mysqlQuery, в которой кроме обращения, было ещё и подключение к БД, на стандартную функцию mysql_query и запихнул её в цикл. Все работает. Вот только не знаю, как сильно , подобные действия нагружают БД и насколько это критично rolleyes.gif
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
kamanch  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 590
Пользователь №: 32899
На форуме: 4 года, 5 месяцев, 4 дня
Карма: 25




Посмотри внимательнее в файл, который содержит Ирбисовскую функцию mysqlQuery();

В самой функции нет подключения к базе.
Подключение ниже. Идет, как обычные инструкции php, которые выполняются один раз после того, как ты инклюдишь этот файл.
Свернутый текст
/** 
* Function for inquiry to DB MySQL.
* Функция для запроса к БД MySQL.
*/

function mysqlQuery($sql, $print = false)
{
$result = mysql_query($sql, IRB_CONNECT);

if($result === false || $print)
{

$error = mysql_error();
$trace = debug_backtrace();

$head = $error ?'<b style="color:red">MySQL error: </b><br>
<b style="color:green">'
. $error .'</b><br><br>':NULL;

$error_log = date("Y-m-d h:i:s") .' '. $head .'
<b>Query: </b><br>
<pre><span style="color:#CC0000">'
. $trace[0]['args'][0] .'</pre></span><br><br>
<b>File: </b><b style="color:#660099">'
. $trace[0]['file'] .'</b><br>
<b>Line: </b><b style="color:#660099">'
. $trace[0]['line'] .'</b>';

/**
*
@TODO To clean in release
*/

//-----------------------------
die($error_log);
//-----------------------------

file_put_contents(IRB_ROOT .'log/mysql.log', strip_tags($error_log) ."\n\n", FILE_APPEND);
header("HTTP/1.1 404 Not Found");
die(file_get_contents(IRB_ROOT .'/404.html'));
}
else
return
$result;
}

/**
* Connection and installation of chaeset of connection
* Подключение и установка кодировок соединения
*/

$db_irbis = mysql_connect( IRB_DBSERVER, IRB_DBUSER, IRB_DBPASSWORD ) or die(IRB_NO_CONNECT);

define('IRB_CONNECT', $db_irbis);

mysql_select_db( IRB_DATABASE, IRB_CONNECT )or die(IRB_NO_DB_SELECT);

mysqlQuery('SET NAMES utf8');
mysqlQuery('SET CHARACTER SET utf8');
mysqlQuery('SET COLLATION_CONNECTION="utf8_general_ci"');
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Winston  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 9509
Пользователь №: 18161
На форуме: 7 лет, 5 месяцев, 14 дней
Карма: 552




Много запросов ты можешь выполнить если используешь mysqli, mysql_multi_query
Зачем клеить несколько запросов если можно так склеить
INSERT INTO `nog_news_tags` (`id`, `id_news`, `id_tags`) VALUES (NULL,'2', '6'), (NULL,'2', '6'), (NULL,'2', '6')
PMСайт пользователя
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
oleg_n  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 71
Пользователь №: 32089
На форуме: 4 года, 7 месяцев, 28 дней
Карма:

Не курю:
21 год, 11 месяцев, 8 дней


kamanch Это от моего некоторого недопонимания - я думал, что в записи $result = mysql_query($sql, IRB_CONNECT); IRB_CONNECT' - это параметр для подключения к БД rolleyes.gif rolleyes.gif

====

Winston, Спасибо, попробую smile.gif
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
oleg_n  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 71
Пользователь №: 32089
На форуме: 4 года, 7 месяцев, 28 дней
Карма:

Не курю:
21 год, 11 месяцев, 8 дней


Winston
Получилось! Запихнул в цикл
    $sql.="(NULL,'".$GET['id']."', '".$key."'), ";   

потом обрезал, все, что было лишнее сзади
 $sql=rtrim(rtrim($sql),",");

И заработало :)
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Winston  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 9509
Пользователь №: 18161
На форуме: 7 лет, 5 месяцев, 14 дней
Карма: 552




$sql = array();
foreach(...)
$sql[] ="(NULL,'".$GET['id']."', '".$key."')";

mysql_query('INSERT .... VALUES ' . implode(',', $sql));

И не нужно танцевать с rtrim :)
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
oleg_n  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 71
Пользователь №: 32089
На форуме: 4 года, 7 месяцев, 28 дней
Карма:

Не курю:
21 год, 11 месяцев, 8 дней


Цитата (Winston @ 16.08.2012 - 15:10)
$sql = array();
foreach(...)
$sql[] ="(NULL,'".$GET['id']."', '".$key."')";

mysql_query('INSERT .... VALUES ' . implode(',', $sql));

И не нужно танцевать с rtrim :)

Вах! Век живи, век учись! laugh.gif biggrin.gif laugh.gif

А если в двух словах, чем Ваш метод лучше моего? rolleyes.gif Просто я ещё не могу осилить весь ассортимент функций, вот и применяю те, принцип работы которых мне понятен cool.gif
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Winston  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 9509
Пользователь №: 18161
На форуме: 7 лет, 5 месяцев, 14 дней
Карма: 552




Цитата (oleg_n @ 16.08.2012 - 15:18)
А если в двух словах, чем Ваш метод лучше моего?

Тем, что он не создает лишних символов (,), которые в конечном результате нужно будет обрезать smile.gif
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
oleg_n  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 71
Пользователь №: 32089
На форуме: 4 года, 7 месяцев, 28 дней
Карма:

Не курю:
21 год, 11 месяцев, 8 дней


Winston, ОК, понял! Спасибо! Постараюсь запомнить smile.gif
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
oleg_n  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 71
Пользователь №: 32089
На форуме: 4 года, 7 месяцев, 28 дней
Карма:

Не курю:
21 год, 11 месяцев, 8 дней


В продолжение темы циклов, правда теперь нужно не добавлять строки, а удалять :)
Если я удаляю несколько строк через phpMyAdmin, то он выдает вот такой запрос:

$sql = "DELETE FROM `tags` WHERE `id` = 24;\n"
. "DELETE FROM `tags` WHERE `id` = 23;";

то бишь меняется один лишь параметр.
Направьте на путь истинный, как правильно записать запрос в цикле, чтобы можно было удалять от одной, до нескольких строк из таблицы, в зависимости от их количества в массиве?
Спасибо заранее :)

=====

Будет ли правильной запись такого вида:
$sql = "DELETE FROM `tags` WHERE `id` = 24,`id` = 23;";
???
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
oleg_n  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 71
Пользователь №: 32089
На форуме: 4 года, 7 месяцев, 28 дней
Карма:

Не курю:
21 год, 11 месяцев, 8 дней


Цитата (oleg_n @ 27.08.2012 - 15:10)

Будет ли правильной запись такого вида:
$sql = "DELETE FROM `tags` WHERE `id` = 24,`id` = 23;";
???

Так не работает sad.gif

Подскажите плз, как наиболее правильно составить запрос для удаления нескольких строк rolleyes.gif
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса