具有动态参数的MySQL查询(PHP)

时间:2018-08-30 20:13:38

标签: php mysql sql

我正在尝试进行MySQL查询以处理动态参数。 我有3个选择,每个选择都有多个:

enter image description here

我希望后面的查询可以检查哪个是多个查询,并在where子句中添加条件。

我无法弄清楚!拜托!

谢谢!

2 个答案:

答案 0 :(得分:0)

如果每个选择都是多个,则可以为每个选择使用一个数组,并用逗号分隔。 例子

var array;
array['AreaNegocio'  ] = "1, 3, 5";
array['CentroDeCosto'] = "21, 35, 500";
array['GrupoDeCuenta'] = "20, 51, 123";

当您在后端收到请求时,可以检查哪个参数。

示例:

if (isset($param['AreaNegocio']) {
     $query .= " AND column IN ('".$param['AreaNegocio']."')";
}

以此类推

答案 1 :(得分:-1)

目前尚不清楚要实现的目标。您有3个html select标签,但您想创建一个从一个表中选择的stmt?

<?php

define('SERVER', "localhost");
define('DB_USER', "root");
define('PASSWORD', "");
define('DATABASE', "jcalendar");

$vals = array(
filter_input(INPUT_GET,'selectField1'), // col1 - id
filter_input(INPUT_GET,'selectField2'), // col2 - date
filter_input(INPUT_GET,'selectField3'), // col3 - time
);

$query = "SELECT * from bookings";

if($vals[0]||$vals[1]||$vals[2])
{
    // Create connection
    $mysqli = new mysqli(SERVER, DB_USER, PASSWORD, DATABASE);

    // Check connection
    if ($mysqli->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    } 

    if($vals[0] && !$vals[1] && !$vals[2]){
        $stmt = $mysqli->prepare($query." WHERE id= ? ");
        if(!$stmt->bind_param("s",$vals[0])) exit();
    }elseif($vals[0] && $vals[1] && !$vals[2]){
        $stmt = $mysqli->prepare($query." WHERE id=? AND date=?");
        if(!$stmt->bind_param("ss",$vals[0],$vals[1])) exit();
    }elseif($vals[0] && !$vals[1] && $vals[2]){
        $stmt = $mysqli->prepare($query." WHERE id=? AND time=?");
        if(!$stmt->bind_param("ss",$vals[0],$vals[2])) exit();
    }elseif(!$vals[0] && $vals[1] && !$vals[2]){
        $stmt = $mysqli->prepare($query." WHERE date= ? ");
        if(!$stmt->bind_param('s',$vals[1])) exit();
    } // and so one a lot of dublicated code

    // ... 

    $result = $stmt->execute();
    // do smth
    $stmt->close();
    $mysqli->close();
}
else
{
    exit();
}

我使用GET变量进行调试,当然可以使用post方法。只需将INPUT_GET更改为INPUT_POST

编辑:注意,我必须为列和表选择具体的名称,否则$ mysqli_prepare()将返回false,这将导致错误,因为$ stmt-> bind_param将在布尔值上调用。您可能应该考虑这种情况。您还应该关闭数据库和stmt。