Podczas rejestracji online, klient może wybrać wiele programów, które zdecydują się zapisać. Programy te są trzycyfrowymi liczbami całkowitymi i są przechowywane w tablicy.Jak wstawić tablicę do pojedynczej instrukcji MySQL Przygotowane w/PHP i PDO
Na przykład:
Chcę zapisać się programid 155, 165, 175, i 185.
Moja tablica jest skonfigurowany tak proste, jak:
$data = array();
$data[] = 155;
$data[] = 165;
$data[] = 175;
$data[] = 185;
Kiedy przychodzi czas aby wstawić tę informację do powiązanej tabeli, uwzględniam również dodatkowe elementy z drugiej części rejestracji:
Na przykład, jeśli robiłem POJEDYNCZĄ paczkę programu Oświadczenie rt będzie wyglądać następująco:
$stmt = $db->prepare("INSERT INTO table SET memberID=?, programID=?, date_added=NOW()");
$stmt->execute(array($memberid, 155));
I zwykle tworzyć prosty pętli dla tablicy powyżej, które nazywamy wiele instancji SQL i wykonanie takich jak:
for($j = 0; $j < (count($data)-1); $j++) {
$stmt = $db->prepare("INSERT INTO table SET memberID=?, programID=?, date_added=NOW()");
$stmt->execute(array($memberid, $data[$j]));
}
zrobić uświadomić sobie, że powyższy kod jest nieprawidłowy ($ data [$ j]), ale szuka właściwego sposobu wykonywania połączenia.
Powiedziano mi też wcześniej, że budowanie pojedynczego dynamicznego polecenia sql jest ogólnie lepsze niż wiele połączeń, jak wyżej. Moje pierwsze przejście byłoby coś w rodzaju:
$sql = array();
foreach($data as $row) {
$sql[] = '("'.$memberid.'", "'.$row[$j].'", NOW()")';
}
mysql_real_query('INSERT INTO table (memberid, programid) VALUES '.implode(',', $sql));
ale z PDO nie jestem do końca pewien, jak to działa, szczególnie w przypadku symboli zastępczych (?).
Wszelkie sugestie?
Nie uruchamiaj przygotować więcej niż jeden raz. Jeden jest przygotowany, możesz wykonać go wiele razy z różnymi wartościami. – Powerlord