使用php在sql查询中传递where条件中的数组

使用php在sql查询中传递where条件中的数组,php,mysql,sql,arrays,get,Php,Mysql,Sql,Arrays,Get,我试图在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']*/' 我得到的结果是: SE

我试图在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

有人能帮我怎么做吗。

你需要操纵
$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;
我已经使用了
作为链接多个列的条件,您可以根据自己的需求进行更改

此版本使用绑定参数,在查询中插入占位符而不是值,然后需要将
$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;