【问题标题】:Passing array in where condition in sql query using php使用php在sql查询中的where条件中传递数组
【发布时间】:2018-07-07 05:44:03
【问题描述】:

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

谁能帮助我如何使它工作。

【问题讨论】:

    标签: php mysql sql arrays get


    【解决方案1】:

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

    【讨论】:

    • 谢谢 :) 拯救了我的一天
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-17
    相关资源
    最近更新 更多