2013-08-11 2 views
1

я следующий кусок кода, который посылает каждый член mya_users мейла (это то, что вставить в почтовый ящик делает.несколько Вставок и хранение PDO подготовленного заявление безопасности

$query_write_mass = "SELECT id FROM mya_users ORDER by artist_real_address ASC"; 
$result_write_mass = $db->prepare($query_write_mass); 
$result_write_mass->execute(); 
while (list($receiver_id) = $result_write_mass->fetch(PDO::FETCH_BOTH)) { 

    $stmt = $db->prepare 
    ("INSERT INTO inbox(folder_id, sender_id, sender_type, receiver_id, 
     receiver_type, title, message_body, time, date, flag, spam) 
     VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); 

     $stmt->bindValue(1, 0, PDO::PARAM_INT); 
     $stmt->bindValue(2, 0, PDO::PARAM_INT); 
     $stmt->bindValue(3, 'x', PDO::PARAM_STR); 
     $stmt->bindValue(4, $receiver_id, PDO::PARAM_INT); 
     $stmt->bindValue(5, $receiver_type, PDO::PARAM_STR); 
     $stmt->bindValue(6, $_POST['title'], PDO::PARAM_STR); 
     $stmt->bindValue(7, $_POST['body'], PDO::PARAM_STR); 
     $stmt->bindValue(8, date("G:i:s"), PDO::PARAM_STR); 
     $stmt->bindValue(9, date("Y-m-d"), PDO::PARAM_STR); 
     $stmt->bindValue(10, 'n', PDO::PARAM_STR); 
     $stmt->bindValue(11, '', PDO::PARAM_STR);                                                 

     $stmt->execute(); 
} 

, что я хочу, чтобы сохранить преимущества безопасности и избежать ПДО подготовленных операторов, НО вставки говорят 10 строк в то время, так что если у меня есть 40k вставки я бы пользу многократной скорости значения вставки и сохранить количество вставок низких.

спасибо

+0

Сомневаюсь, что вы можете иметь 40k вставок в одном запросе из-за максимально допустимого пакета. В любом случае, вы попробовали * поиск *? –

+0

Есть немного вещей вокруг решения моей проблемы в stackoverflow, но никто, кажется, не уважает безопасность PDO, я думал, что получу более персонализированный подход к своей проблеме –

+0

, когда я говорю 40k вставок, я имею в виду, что с текущим запросом, скажем, есть 40kusers => 40k запросов ... и я хочу оптимизировать то, что –

ответ

2

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

INSERT INTO inbox(folder_id, sender_id, sender_type, receiver_id, 
    receiver_type, title, message_body, dt, flag, spam) 
    VALUES (0, 0, 'x', ?, ?, ?, ?, NOW(), 'n', '')"); 

Я также соединил два поля date и time в один dt, так как нет никаких оснований, что они разделены, но это может позволить нам использовать короче код.

И теперь вы можете перейти к следующему шагу - используя INSERT .. SELECT подход

INSERT INTO inbox(folder_id, sender_id, sender_type, receiver_id, 
    receiver_type, title, message_body, dt, flag, spam) 
    SELECT 0, 0, 'x', id, ?, ?, ?, NOW(), 'n', '' 
    FROM mya_users ORDER by artist_real_address ASC 

и связать данные только три оставшихся переменных!

+0

да, но это сделает один INSERT @ время. Я бы подумал, что лучше всего вставить 10 записей с 1 вставкой и по-прежнему соблюдать синтаксис PDO. –

+0

нет, не будет. –

+0

Я не понимаю инструкцию INSERT - SELECT. Это кое-что, что я не делал до сих пор (у меня есть опыт в JOINS и т. Д.). Но я не видел полного полного INSERT SELECT с привязанными к pdo данными, поэтому я не могу его понять. Из того, что я получаю, id и 3 "?" заставьте меня задаться вопросом, что это такое. –

Смежные вопросы