Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL,其中没有提供值时为“all”_Php_Mysql_Prepared Statement - Fatal编程技术网

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,谢谢!