Używasz pojedynczych cudzysłowów w instrukcji insert :
$sth3 = $pdo3->prepare('
INSERT INTO Comment (info, pID, cID)
VALUES($comm, $pID3, $cID)
');
Za pomocą tych prostych cudzysłowów $comm
nie będą oceniane -- i literał $comm
ciąg znaków zostanie wysłany do bazy danych - w wyniku czego prawdopodobnie się nie spodziewasz.
Jeśli chcesz, aby zmienne były interpolowane, powinieneś użyć podwójne cudzysłowy wokół ciągu
.
Ale ponieważ próbujesz użyć przygotowanych oświadczeń, nie to powinieneś robić właściwie.
Zamiast tego powinieneś użyć symboli zastępczych w oświadczeniu -- a następnie powiąż je ze swoimi danymi podczas wykonywania instrukcji.
Twoje prepare
wyglądałoby trochę tak, jak sądzę :
$sth3 = $pdo3->prepare('
INSERT INTO Comment (info, pID, cID)
VALUES(:comm, :pID3, :cID)
');
Zwróć uwagę na :comm
, :pID3
i :cID
symbole zastępcze.
I wtedy, podczas wykonywania instrukcji, faktycznie przekażesz kilka prawdziwych danych, odpowiadających symbolom zastępczym :
$sth3->execute(array(':comm' => $comm,':pID3' => $pID3,':cID' => $cID,));
Dodatkowa uwaga:ponieważ używasz przygotowanych wyciągów, nie musisz używać mysql_real_escape_string()
(który nie jest funkcją związaną z PDO, BTW, i powinien być używany tylko podczas pracy z mysql_*
funkcje) :ucieczką zajmuje się sam przygotowany mechanizm wypowiedzi.