我正在尝试在sql查询中传递数组。
数组包含列名作为索引,它们被分配给我使用GET方法获得的相应值。
例如,iam尝试编译此代码:
$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
有人可以帮我如何使它工作。
答案 0 :(得分:0)
您需要操纵$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;