我正在尝试使用mysql查询来处理动态参数。我有3个选择,每个选择是多个:我希望后面的查询检查哪个是多个,并在where子句中添加条件。我想不通!拜托!谢谢!
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']."')"; }
等等
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。
2条答案
按热度按时间kcugc4gi1#
如果每个select都是多个,则可以为每个select使用一个以逗号分隔的数组。例子
当您在后端收到请求时,您可以检查所排列的参数。
例子:
等等
oknrviil2#
你想要达到什么目标还不完全清楚。您有3个html select标记,但您想创建一个从一个表中进行选择的stmt?
我用get变量进行调试,当然可以用post方法。简单更改输入\u进入输入\u后
编辑:注意,我必须为列和表选择具体的名称,否则$mysqli\u prepare()将返回false,这将导致错误,因为$stmt->bind\u param将在布尔值上调用。你应该考虑一下这个案子。您还应该关闭数据库和stmt。