Quiero ejecutar una consulta parametrizada para realizar una búsqueda por parámetros proporcionados por el usuario. Hay bastantes parámetros y no todos se suministrarán todo el tiempo. ¿Cómo puedo hacer una consulta estándar que especifique todos los parámetros posibles, pero ignore algunos de estos parámetros si el usuario no eligió un valor de parámetro significativo?Ignorar los criterios WHERE particulares
He aquí un ejemplo imaginario para ilustrar lo que voy a
$sql = 'SELECT * FROM people WHERE first_name = :first_name AND last_name = :last_name AND age = :age AND sex = :sex';
$query = $db->prepare($sql);
$query->execute(array(':first_name' => 'John', ':age' => '27');
Obviamente, esto no funcionará porque el número de parámetros proporcionados no coincide con el número de parámetros esperados. ¿Tengo que elaborar la consulta cada vez con solo los parámetros especificados que se incluyen en la cláusula WHERE, o hay alguna manera de hacer que algunos de estos parámetros sean ignorados o siempre devuelven la verdad cuando se marcan?
No creo que eso es lo que quiere. Esto coincidirá con 'first_name' tiene un valor coincidente, o si es nulo. Pero por lo que entiendo, quiere 'first_name' para coincidir en cualquier cosa (como si no hubiera ninguna cláusula WHERE para esa columna en absoluto). – netcoder
@netcoder no está comprobando si first_name es nulo, está comprobando si '(first_name = @var o @var es nulo)' –
Oh, tienes razón, leo demasiado rápido :) – netcoder