HTML
textarea
我有来自无法插入 MySQL 表的元素的输入值,因为它包含撇号(')字符,例如: 'Adam's garden'
。因此,我按照 PHP 文档的建议使用了 PDO::prepare() 函数,但我仍然无法将此数据插入表中,但是当我删除撇号时'Adams garden'
,该值已成功插入
我认为该PDO::prepare()
函数应该处理 SQL 语句的引号和转义特殊字符。PHP 文档确实说要PDO::prepare()
与绑定参数一起使用,但我没有将我的 php 变量绑定到查询参数。绑定参数是绝对必要的还是只是因为这是使用PDO::prepare()
函数的常用方式而被声明?
我如何在输入变量中引用和转义特殊字符?
编辑:
我正在使用字符串连接来执行多个 SQL INSERT
。撇号位于$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