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.