[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите оптимизировать код
vital
Есть массив со строками, к-е надо внести в бд. Есть PDO и его bindParam();
Cоостветственно, сначала проходим массив сначала до конца что бы составить строку SQL запроса с плейсхолдерами.
А потом еще раз проходим массив, что бы сделать bindParam('плейсхолдер','элемент массива');
И таких массивов у меня 2. Получается 4 цикла на 2 массива. Так вот, как-то дохрена ;)

Как бы это переделать, что бы поменьше циклов было?)
if (is_array($youtubelinks) && count($youtubelinks) > 0)
{
$sql = 'INSERT INTO attachments(msg_id,type,content) VALUES';


foreach ($youtubelinks as $link)
{
$sql.='(' . $last . ',\'youtube\',:' . $link . '),';
}
$sql{strlen($sql) - 1} = ';';
$prep = $db->prepare($sql);
foreach ($youtubelinks as $link)
{
$prep->bindParam(':' . $link, $link, PDO::PARAM_STR);
}
try
{
$prep->execute();
} catch (PDOException $e)
{
echo 'Add youtube link failed:' . $e->getMessage();
}
$prep = null;
}

if (is_array($images) && count($images) > 0)
{
$sql = 'INSERT INTO attachments(msg_id,type,content) VALUES';

foreach ($images as $link)
{
$sql.='(' . $last . ',\'img\',:' . $link . '),';
}
$sql{strlen($sql) - 1} = ';';
$prep = $db->prepare($sql);
foreach ($images as $link)
{
$prep->bindParam(':' . $link, $link, PDO::PARAM_STR);
}
try
{
$prep->execute();
} catch (PDOException $e)
{
echo 'Add image failed:' . $e->getMessage();
}
}





Спустя 21 минута, 4 секунды (12.09.2011 - 21:48) Winston написал(а):
Цитата (vital @ 12.09.2011 - 21:27)
foreach ($youtubelinks as $link)
            {
                $sql.='(' . $last . ',\'youtube\',:' . $link . '),';
            }

Можно заменить на
$sql = implode('', array_map(create_function('$link', 'global $last; return "(" . $last . ",\'youtube\',:" . $link . "),";'), $youtubelinks));

И без цикла.

Спустя 18 минут, 44 секунды (12.09.2011 - 22:07) vital написал(а):
Цитата (Winston @ 12.09.2011 - 18:48)
Цитата (vital @ 12.09.2011 - 21:27)
foreach ($youtubelinks as $link)
            {
                $sql.='(' . $last . ',\'youtube\',:' . $link . '),';
            }

Можно заменить на
$sql = implode('', array_map(create_function('$link', 'global $last; return "(" . $last . ",\'youtube\',:" . $link . "),";'), $youtubelinks));

И без цикла.

global там внутри не работает, но спасибо за идею.
$sql.=implode(',', array_map(create_function('$a,$last=' . $last, 'return "(". $last . ",\'youtube\',:".$a.")";'), $youtubelinks));

вот такой получился рабочий вариант.
Еще мб кто подскажет идеи?)

Спустя 2 минуты, 45 секунд (12.09.2011 - 22:09) Winston написал(а):
Цитата (vital @ 12.09.2011 - 22:07)
global там внутри не работает, но спасибо за идею

Хм.. У меня работает.


_____________
"Нужно быть готовым прислушиваться к тем, кто может тебя чему-нибудь научить. Иначе ты никогда не вырастешь."

Откровенно я никому ниразу не нагрубил. А дать подзатыльник зарвавшемуся юнцу, так это и ему на пользу, и мне в удовольствие. © AllesKlar
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.