用php实现sql查询中where条件下的mysql数组传递

sc4hvdpw  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(400)

我正在尝试在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

有人能帮我怎么做吗。

6qfn3psc

6qfn3psc1#

你需要操纵 $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;

相关问题