Soy nuevo en PHP y estoy tratando de aprender a utilizar PDO para conectarme a una prueba MySQL db. Tengo el siguiente:Ejecutar una instrucción PDO preparada con la cláusula similar
try {
$db = new PDO('mysql:dbname=MYDBNAME;host=MYHOST', 'USERNAME', 'PASSWORD');
$query = "select * from books where ? like '%?%'";
$stmt = $db->prepare($query);
$stmt->execute(array($searchtype, $searchterm));
} catch(PDOException $e) {
echo 'PDOException: ' . $e->getMessage();
}
Cuando lo intento me sale el siguiente mensaje de advertencia: Advertencia: PDOStatement :: execute() [pdostatement.execute]: SQLSTATE [HY093]: número de parámetro no válido: número de variables ligadas no coincide con el número de tokens
Cuando elimino la cláusula similar, y el parámetro $ searchterm, devuelve el resultado correctamente. Pensé que, como '%?%', Podría no ser una forma legal de crear esta consulta entre comillas dobles, así que probé escapando ', lo cual no funcionó. Busqué a una solución, y se encontró que alguien se movía '% y%' hasta donde $ término de búsqueda es:
$query = "select * from books where ? like ?";
...
$stmt->execute(array($searchtype, '\'%'.$searchterm.'%\''));
me dieron el mismo resultado.
Se agradece cualquier ayuda. ¡Gracias!
/ ACTUALIZACIÓN ****/ He encontrado en el ejemplo 12 de http://us3.php.net/manual/en/pdo.prepared-statements.php
Ejemplo # 12 Uso no válido de marcador de posición
<?php
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name LIKE '%?%'");
$stmt->execute(array($_GET['name']));
// Below is What they suggest is the correct way.
// placeholder must be used in the place of the whole value
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name LIKE ?");
$stmt->execute(array("%$_GET[name]%"));
?>
Probé este, y aunque Ya no recibo una Advertencia, no obtengo ningún resultado. Sin embargo, cuando ejecuto la consulta directamente obtendré un par de resultados. ¿Alguna idea?
Tengo el mismo problema, como usted, pensé que el '%' era una parte de la estructura de la consulta en lugar de los valores;) – Strae