动态准备声明

时间:2015-02-13 22:08:11

标签: php mysqli prepared-statement

我准备了这样的查询:

$stmt = $mysqli->prepare("SELECT DISTINCT instr FROM raspisanie WHERE state='1' AND type!='free' AND instr=? AND school=? AND age=? AND startdate > NOW()");

并像这样绑定:

$stmt->bind_param("sis", $get_instr, $get_school, $get_age);

问题是所有变量都是可选的。因此,如果至少有一个变量是空的,数据库将不返回任何内容。我认为我必须以某种方式使这个陈述充满活力(排除准备和绑定参数之间的不平衡),但不知道怎么做。

所以我必须让动态准备和绑定参数?什么是正确的方法呢? GET从网站上的表格中获取所有变量。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。这对我来说非常合适

$sql = "SELECT instr FROM schedule WHERE state=1 AND type!='free' AND startdate > NOW()";

$school=$_GET['school'];
$age=$_GET['age'];
$instrument=$_GET['instrument'];

if ($school==true)
{
$sql .= " AND school=?";
$bind[]=$school;
$type[0]='i';
}

if ($age==true)
{
$sql .= " AND (age=? OR mode='ind')";
$bind[]=$age;
$type[0].='s';
}

if ($instrument==true)
{
$sql .= " AND instr=?";
$bind[]=$instrument;
$type[0].='s';
}

$params=array_merge($type, $bind);

$stmt = $mysqli->prepare($sql);
call_user_func_array(array($stmt, 'bind_param'), $params);

$stmt->execute();
$stmt->bind_result($instr);
$stmt->close();
相关问题