Я подозреваю, что, хотя вы можете использовать подготовленное утверждение, вы не привязываете параметры.Например, вместо
$val = "Some string with an a'postrophe in it";
$stmt = $pdo->prepare("UPDATE table SET col = '$val'");
$stmt->execute();
Вы должны использовать
$val = "Some string with an a'postrophe in it";
$stmt = $pdo->prepare('UPDATE table SET col = :val');
$stmt->bindParam('val', $val);
$stmt->execute();
или как минимум
$val = "Some string with an a'postrophe in it";
$stmt = $pdo->prepare('UPDATE table SET col = :val');
$stmt->execute(array('val' => $val));
Это использует именованные параметры, но вы также можете использовать позиционныеиспользуя ?
в качестве заполнителя