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) | ||
Можно заменить на $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