带动态参数的mysql查询(php)

zkure5ic  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(455)

我正在尝试使用mysql查询来处理动态参数。我有3个选择,每个选择是多个:

我希望后面的查询检查哪个是多个,并在where子句中添加条件。
我想不通!拜托!
谢谢!

kcugc4gi

kcugc4gi1#

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

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']."')";
}

等等

oknrviil

oknrviil2#

你想要达到什么目标还不完全清楚。您有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方法。简单更改输入\u进入输入\u后
编辑:注意,我必须为列和表选择具体的名称,否则$mysqli\u prepare()将返回false,这将导致错误,因为$stmt->bind\u param将在布尔值上调用。你应该考虑一下这个案子。您还应该关闭数据库和stmt。

相关问题