A veces, mi secuencia de comandos recibe una solicitud $_POST["is_searchfield"] de un formulario. Entonces quiero usar esta variable como parte de una cláusula "Dónde" de una consulta MySQL. De lo contrario, esta parte de la cláusula "Dónde" no debería afectar al resto de la consulta.
Para la consulta utilizo una declaración preparada.
Si $_POST["is_searchfield"] tiene un valor, la consulta funciona como se esperaba, pero si no se envía ninguna variable, la consulta completa no arroja ningún resultado.
¿Cómo puedo lograr que una variable vacía no destruya toda la consulta y solo se ignore esta parte determinada de la cláusula "dónde"? Además, la declaración preparada debería seguir funcionando.
Traté de verificar si la variable está configurada con !empty pero no cambia este comportamiento.
$conn = new mysqli("localhost", "xxxx", "xxxx", "xxxx"); $conn->set_charset("utf8"); // Variables to bind $classid = "4"; if(!empty($_POST["is_searchfield"])) { $searchfield = $_POST["is_searchfield"]; } else { $searchfield= ""; } $fileid = "10"; $sqlitemsparse = "SELECT * FROM itemSparse INNER JOIN item ON item.id = itemSparse.id"; $sqlitemsparse .= " WHERE item.ClassID = ?"; $sqlitemsparse .= " AND itemSparse.Display_lang = ?"; $sqlitemsparse .= " AND itemSparse.fileid = ?"; $sqlitemsparse2 = " LIMIT 0, 10"; $stmt = $conn->prepare($sqlitemsparse . $sqlitemsparse2); $stmt->bind_param('sss', $classid, $searchfield, $fileid); $stmt->execute(); $resultitemsparse = $stmt->get_result(); $rowsitemsparse = $resultitemsparse->fetch_all(MYSQLI_ASSOC);La idea es cambiar la consulta para que coincida con los datos proporcionados.
$conn = new mysqli("localhost", "xxxx", "xxxx", "xxxx"); $conn->set_charset("utf8"); // Variables to bind $classid = "4"; $fileid = "10"; if(!empty($_POST["is_searchfield"])) { $sqlitemsparse = "SELECT * FROM itemSparse INNER JOIN item ON item.id = itemSparse.id WHERE item.ClassID = ? AND itemSparse.Display_lang = ? AND itemSparse.fileid = ? LIMIT 0, 10"; $stmt = $conn->prepare($sqlitemsparse); $stmt->bind_param('sss', $classid, $_POST["is_searchfield"], $fileid); } else { $sqlitemsparse = "SELECT * FROM itemSparse INNER JOIN item ON item.id = itemSparse.id WHERE item.ClassID = ? AND itemSparse.fileid = ? LIMIT 0, 10"; $stmt = $conn->prepare($sqlitemsparse); $stmt->bind_param('ss', $classid, $fileid); } $stmt->execute(); $resultitemsparse = $stmt->get_result(); $rowsitemsparse = $resultitemsparse->fetch_all(MYSQLI_ASSOC);