Php MySQL,其中没有提供值时为“all”
我正在编写一个工具来搜索数据库中的不同记录,您必须在其中指定年份。但是,如果没有输入年份值,或者等于零,我希望能够选择所有记录Php MySQL,其中没有提供值时为“all”,php,mysql,prepared-statement,Php,Mysql,Prepared Statement,我正在编写一个工具来搜索数据库中的不同记录,您必须在其中指定年份。但是,如果没有输入年份值,或者等于零,我希望能够选择所有记录 $stmt = $mysqli->prepare("SELECT * FROM performances WHERE year = ?"); $stmt->bind_param("i", $year); 我尝试过使用if语句,但它们失败了,因为bind_param中的参数比查询中的空格多,m.sh: $stmt = $mysqli->prepare(
$stmt = $mysqli->prepare("SELECT * FROM performances WHERE year = ?");
$stmt->bind_param("i", $year);
我尝试过使用if语句,但它们失败了,因为bind_param中的参数比查询中的空格多,m.sh:
$stmt = $mysqli->prepare("SELECT *
FROM performances
. (($year != 0) ? " WHERE year = ? " : " ")
. "");
$stmt->bind_param("i", $year);
谢谢您可以通过不同的方式实现这一点,例如:
$stmt = $mysqli->prepare("SELECT * FROM performances WHERE year = :year or 0 = :year");
$stmt->bind_param("year", $year);
ShyForNow有一个很好的答案。我还建议验证进入SQL的输入:
$year = sprintf("%d", $year); -- or even throw exception if $year is not numeric
if ($year > 0) -- or could also write if ($year >= $minAcceptableYear and $year <= $maxAcceptableYear)
{
$stmt = $mysqli->prepare("SELECT * FROM performances WHERE year = ?");
$stmt->bind_param("i", $year);
}
else
{
$stmt = $mysqli->prepare("SELECT * FROM performances");
}
如果有参数要绑定,那么使用条件绑定参数如何?如果没有输入年份,为什么不这样做:从性能中选择*呢?我有5个不同的变量,可以设置为“全部”或特定id,因此如果到目前为止语句需要120个不同的组合工作,但是,我如何扩展这一点,使其适用于多个变量,如团队、季节和场地等?应该直接添加其他参数$stmt->bind_paramteam,$team;并将查询更新为$stmt=$mysqli->prepareSELECT*,其中year=:year或0=:year和team=:team或0=:team;我不知道你可以多次使用bind_param,谢谢!