Bạn đang sử dụng dấu ngoặc kép trong câu lệnh chèn của mình:
$sth3 = $pdo3->prepare('
INSERT INTO Comment (info, pID, cID)
VALUES($comm, $pID3, $cID)
');
Với những dấu ngoặc kép đơn giản đó, $comm
sẽ không được đánh giá - và chữ $comm
chuỗi sẽ được gửi đến cơ sở dữ liệu - dẫn đến điều mà bạn có thể không mong đợi.
Nếu bạn muốn các biến được nội suy, bạn nên sử dụng dấu ngoặc kép xung quanh chuỗi của bạn
.
Tuy nhiên, khi bạn đang cố gắng sử dụng các tuyên bố chuẩn bị sẵn, đó không phải là điều bạn nên làm , thực sự.
Thay vào đó, bạn nên sử dụng trình giữ chỗ trong câu lệnh - và sau đó, liên kết chúng với dữ liệu của bạn, khi thực hiện câu lệnh.
prepare
của bạn sẽ trông giống như thế này, tôi cho rằng:
$sth3 = $pdo3->prepare('
INSERT INTO Comment (info, pID, cID)
VALUES(:comm, :pID3, :cID)
');
Lưu ý :comm
, :pID3
và :cID
trình giữ chỗ.
Và sau đó, khi thực hiện câu lệnh, bạn sẽ thực sự chuyển một số dữ liệu thực, tương ứng với các trình giữ chỗ:
$ sth3-> execute (array (':comm' => $ comm, ':pID3' => $ pID3, ':cID' => $ cID,));
Lưu ý bổ sung:vì bạn đang sử dụng các câu lệnh đã chuẩn bị sẵn, bạn không cần phải sử dụng mysql_real_escape_string()
(không phải là một hàm liên quan đến PDO, BTW và chỉ nên được sử dụng khi làm việc với mysql_*
chức năng) :việc trốn thoát được xử lý bởi chính thuyết mecanism đã chuẩn bị sẵn.