使用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

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

Nigel Ren

您需要操作$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;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章