Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用php在字符串中转义单引号(撇号)_Php_Mysql_Pdo - Fatal编程技术网

如何使用php在字符串中转义单引号(撇号)

如何使用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_

我有这样一个SQL查询:-

$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();
}