variable una simples parte extraer escapar eliminar dobles dentro concatenar comillas caracteres cadena php mysql pdo

una - heredoc php



Cómo escapar de comillas simples(apóstrofo) en cadena usando php (4)

De hecho, sugeriría hacerlo de la siguiente manera:

$stmt = $pdo->prepare( ''SELECT * FROM `products_keywords` WHERE `product_type` = :product_type''); $res = $stmt->execute(array('':product_type'' => $product_type));

De esta manera, no necesita escapar de nada y su consulta es segura.

Tengo una consulta SQL como esta: -

$stmt = $pdo->prepare( "SELECT * FROM `products_keywords` WHERE `product_type` = ''" . $product_type . "'' ");

No sé cuál será el valor en la variable $ product_type . Pero ahora, obtengo la Camisa de hombre en la variable $ product_type que está causando el error de sintaxis en mi consulta SQL. Estoy seguro de que este error se debe a la comilla simple en el valor de la camisa de hombre . ¿Cómo escapo este valor de acuerdo con mi consulta? Y cómo verificar si hay una comilla simple en mi variable $ product_type y luego escapar de acuerdo con mi consulta. Gracias por adelantado.


La respuesta es que no es necesario. La forma correcta de usar la preparación de PDO es así:

$stmt = $pdo->prepare( "SELECT * FROM `products_keywords` WHERE `product_type` = ?");

Este es el objetivo de usar una declaración preparada. Luego bind el parámetro de la siguiente manera:

$stmt->bindParam(1, $product_type)

Prueba,

Esquema:

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'');

Ver datos:

select * from `products_keywords`; +----+---------------------+--------------+ | id | products_keywords | product_type | +----+---------------------+--------------+ | 1 | zoom lawn cut mower | Lawn Mower | | 2 | stylish torso Polo | Men''s Shirt | +----+---------------------+--------------+

PHP:

<?php // turn on error reporting, or wonder why nothing is happening at times error_reporting(E_ALL); ini_set("display_errors", 1); $servername="localhost"; $dbname="so_gibberish"; $username="nate123"; $password="openSesame1"; try { $pdo = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $product_type="Men''s Shirt"; $stmt = $pdo->prepare("SELECT * FROM `products_keywords` WHERE `product_type` = ?"); $stmt->bindParam(1, $product_type); $stmt->execute(); while($row = $stmt->fetch()) { echo $row[''id''].", ".$row[''products_keywords''].", ".$row[''product_type'']."<br/>"; } } catch (PDOException $e) { echo ''pdo problemo: '' . $e->getMessage(); // dev not production code exit(); } ?>

Navegador:


Para insertar una cita en una declaración PDO, simplemente use la función addslashes . Por ejemplo:

function insert($tagName) { $tagName = addslashes($tagName); $rs = $this->db->prepare("INSERT INTO tags (tagName) VALUES (''$tagName'')"); $rs->execute(); }


Sigues pidiendo una solución para escapar del apóstrofe. Estoy de acuerdo con los otros comentarios y respuestas a los que debería acostumbrarse a usar los parámetros de consulta. Es más limpio y fácil.

Pero PDO realmente tiene una función para escapar. Se llama PDO::quote() :

$product_type_quoted = $pdo->quote($product_type); $stmt = $pdo->prepare( "SELECT * FROM `products_keywords` WHERE `product_type` = $product_type_quoted");

Tenga en cuenta que quote () escapa de la cadena según sea necesario, y también agrega comillas simples a su alrededor, por lo que no necesita hacer eso cuando usa esa variable en su cadena SQL.

Lea la documentación para obtener más información: PDO::quote() De hecho, podría haber respondido esta pregunta usted mismo al pasar unos minutos leyendo la documentación de la DOP.