У меня есть входные значения из элемента HTML
textarea
, который нельзя вставить в таблицу MySQL, потому что он содержит символ апострофа ('), например: 'Adam's garden'
. Итак, я использовал функцию PDO :: prepare (), как рекомендовано в документации PHP, но я все еще не могу вставить эти данные в таблицу, но когда я удаляю апостроф, чтобы вместо этого получить 'Adams garden'
, значение вставляется успешно
Я думал, что функция PDO::prepare()
должна заботиться о кавычках и экранировании специальных символов для операторов SQL. В документации PHP сказано использовать PDO::prepare()
с привязанными параметрами, но я не привязываю свои переменные php к параметрам запроса. Являются ли связанные параметры абсолютно необходимыми или это просто указано, потому что это обычный способ использования функции PDO::prepare()
?
Как еще я могу заключить в кавычки и экранировать специальные символы в моих входных переменных?
РЕДАКТИРОВАТЬ: Я использую конкатенацию строк для выполнения нескольких INSERT
SQL. Апостроф находится в поле $evData['Description']
в примере кода ниже.
$evQuery ="INSERT INTO ep_events
VALUES(NULL, '" .$evData['Title'] ."', '" .$evData['Venue'] ."', '" .$evData['Address'] ."', '" .$evData['Description'] ."')";
$tkQuery ="INSERT INTO ep_tickets VALUES";
foreach ($tkData as $ref =>$tkObj){
for($i=0; $i<$tkObj['Quantity']; $i++){
$tkQuery .='(NULL, LAST_INSERT_ID(), "' .$tkObj['Name'] .'", "' .$tkObj['Price'] .'"),';
}
}
$tkQuery =rtrim($tkQuery, ',');
$query ='START TRANSACTION;' .$evQuery ."; " .$tkQuery .';' .'COMMIT;';
$stm =$db->prepare($query);
$stm->execute();
Это сегмент документации PHP:
PDO :: quote () помещает кавычки вокруг входной строки (если требуется) и экранирует специальные ›символы внутри входной строки, используя стиль кавычек, соответствующий базовому› драйверу.
Если вы используете эту функцию для построения операторов SQL, настоятельно рекомендуется использовать PDO :: prepare () для подготовки операторов SQL со связанными параметрами вместо использования PDO :: quote () для интерполяции вводимых пользователем данных в оператор SQL. Подготовленные операторы со связанными параметрами не только более переносимы, удобны и невосприимчивы к SQL-инъекции, но и часто выполняются намного быстрее, чем интерполированные запросы, поскольку и серверная, и клиентская стороны могут кэшировать скомпилированную форму запроса. http://www.php.net/manual/en/pdo.quote.php