如何使用php在字符串中转义单引号(撇号)
我有这样一个SQL查询:-如何使用php在字符串中转义单引号(撇号),php,mysql,pdo,Php,Mysql,Pdo,我有这样一个SQL查询:- $stmt = $pdo->prepare( "SELECT * FROM `products_keywords` WHERE `product_type` = '" . $product_type . "' "); 我不知道$product\u类型变量的值是多少。但是现在,我在$product_类型变量中得到了男式衬衫,这导致了SQL查询中的语法错误。我确信这个错误是由于男式衬衫价值中的单引号引起的。如何根据查询转义此值?以及如何检查$product_
$stmt = $pdo->prepare(
"SELECT * FROM `products_keywords` WHERE `product_type` = '" . $product_type . "' ");
我不知道$product\u类型变量的值是多少。但是现在,我在$product_类型变量中得到了男式衬衫,这导致了SQL查询中的语法错误。我确信这个错误是由于男式衬衫价值中的单引号引起的。如何根据查询转义此值?以及如何检查$product_类型变量中是否有单引号,然后根据我的查询将其转义。提前谢谢 答案是你不需要这样做。使用PDO的prepare的正确方法如下:
$stmt = $pdo->prepare(
"SELECT * FROM `products_keywords` WHERE `product_type` = ?");
这就是使用预先准备好的语句的全部要点。然后按如下方式输入参数:
$stmt->bindParam(1, $product_type)
证明
模式:
create table `products_keywords`
( `id` int not null,
`products_keywords` varchar(1000) not null,
`product_type` varchar(100) not null
);
insert `products_keywords` (`id`,`products_keywords`,`product_type`) values
(1,'zoom lawn cut mower',"Lawn Mower"),
(2,'stylish torso Polo','Men\'s Shirt');
查看数据:
select * from `products_keywords`;
+----+---------------------+--------------+
| id | products_keywords | product_type |
+----+---------------------+--------------+
| 1 | zoom lawn cut mower | Lawn Mower |
| 2 | stylish torso Polo | Men's Shirt |
+----+---------------------+--------------+
PHP:
浏览器:
实际上,我建议按以下方式进行:
$stmt = $pdo->prepare(
'SELECT * FROM `products_keywords` WHERE `product_type` = :product_type');
$res = $stmt->execute(array(':product_type' => $product_type));
这样,您就不需要转义任何内容,而且您的查询是安全的。您一直在要求一个解决方案来转义撇号。我同意您应该习惯使用查询参数的其他评论和答案。它更干净更容易 但PDO实际上有一个转义功能。它叫: 请注意,quote会根据需要转义字符串,并在其周围添加单引号,因此在SQL字符串中使用该变量时不需要这样做
阅读文档了解更多信息:事实上,您可以花几分钟阅读PDO文档来回答这个问题。要在PDO语句中插入引号,只需使用addslashes函数。例如:
function insert($tagName)
{
$tagName = addslashes($tagName);
$rs = $this->db->prepare("INSERT INTO tags (tagName) VALUES ('$tagName')");
$rs->execute();
}
将Men's Shirt分配给PHP变量并使用它。比如$prod=男式衬衫;使用参数绑定,您就不会有这个问题:似乎您错过了绑定的全部要点。其目的之一是避免通过字符串连接生成SQL查询。@感谢您的回复。你能再详细一点吗?并根据问题编辑我的查询。谢谢。$query=$link->prepare'SELECT*FROM products\u关键字,其中product\u type=:product\u type'$查询->执行[':产品类型=>$product\U type];没必要逃避它!如何在带有通配符的like子句中使用此选项?$res=$stmt->EXECUTARRAY':product_type'=>$product_type'%';在查询字符串中,用like替换等于字符。你能给我转义字符解决方案吗?在like子句中如何使用通配符?只使用where product_type like?为什么不试试?你能给我转义字符解决方案吗?不,我不会,因为这不是使用PDO的正确方法。那么您就可以开始使用mysql_*函数了
$product_type_quoted = $pdo->quote($product_type);
$stmt = $pdo->prepare(
"SELECT * FROM `products_keywords`
WHERE `product_type` = $product_type_quoted");
function insert($tagName)
{
$tagName = addslashes($tagName);
$rs = $this->db->prepare("INSERT INTO tags (tagName) VALUES ('$tagName')");
$rs->execute();
}