首页 > 解决方案 > 使用php在sql查询中的where条件中传递数组

问题描述

我正在尝试在 sql 查询中传递一个数组。

数组包含列名称作为索引,它们被分配给我使用 GET 方法获得的各自值。

例如,我试图编译这段代码:

$a='email';    
$b=array($a => $_GET['x']);    
$sql="SELECT * FROM users WHERE $b";    
echo $sql;

我需要的输出是:

SELECT * FROM users WHERE email='/*value of $_GET['x']*/'

我得到的输出是:

SELECT * FROM users where Array

有人可以帮助我如何使它工作。

标签: phpmysqlsqlarraysget

解决方案


您需要操纵$b数组以使其成为您之后的字符串,目前它只是以自己的格式转储内容。

这个版本将做你之后...

$b=array($a => $_GET['x']);  
$columns = [];
foreach ( $b as $name => $value )   {
    $columns[] = "$name = '$value'";
}
$sql="SELECT * FROM users WHERE ".implode(" and ", $columns);
echo $sql.PHP_EOL;

我已将其and用作链接多个列的条件,您可以根据需要进行更改。

这个版本改为使用绑定参数,插入占位符而不是查询中的值,然后您需要将$data数组绑定到准备好的语句(如何取决于您使用的 API)。这更安全,更灵活(并且推荐)......

$b=array($a => $_GET['x']);
$columns = [];
$data = [];
foreach ( $b as $name => $value )   {
    $columns[] = "$name = ?";
    $data[] = $value;
}
$sql="SELECT * FROM users WHERE ".implode(" and ", $columns);
echo $sql.PHP_EOL;

推荐阅读