用PHP抓取参数和查询

时间:2018-07-26 22:47:49

标签: php sql parameters query-string

我正在将参数字符串传递给我的php代码,但我不完全知道参数是什么。假设我传入了一个包含

的字符串
?&cName_1=fbe&cName_2=ege&cBirthday_1=r3rg&cBirthday_2=fev

我不仅需要知道每个参数是什么,而且还需要名称和生日来排队查询。

我正在尝试以下代码,但一次只能使用一个参数

$email = $_GET['email'];

foreach($_GET as $key => $value){
    $query = "INSERT INTO directory(cName, cBirthday, username) VALUES('$value', '$pBirthday', '$email')";

    $result = mysqli_query($con, $query);
}

2 个答案:

答案 0 :(得分:0)

通过使用方括号表示数组索引/键,您可以方便地操作PHP的基于请求的超全局变量(即$_GET$_POST)。

例如,类似查询字符串

?email=me@example.com&c[0][name]=fbe&c[0][birthday]=r3rg&c[1][name]=ege&c[1][birthday]=fev

产生以下$_GET结构

Array
(
    [email] => me@example.com
    [c] => Array
        (
            [0] => Array
                (
                    [name] => fbe
                    [birthday] => r3rg
                )

            [1] => Array
                (
                    [name] => ege
                    [birthday] => fev
                )

        )

)

要添加更多参数,只需添加

&c[n][name]=value&c[n][birthday]=value

其中n是下一个索引。


在代码中使用它会更容易,尤其是使用预准备的语句

// Make MySQLi report errors as exceptions
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

$email = $_GET['email'];
$stmt = $con->prepare(
        'INSERT INTO directory (cName, cBirthday, username) VALUES (?, ?, ?)');
$stmt->bind_param('sss', $cName, $cBirthday, $email);
foreach ($_GET['c'] as $c) {
    $cName = $c['name'];
    $cBirthday = $c['birthday'];
    $stmt->execute();
}

答案 1 :(得分:-1)

要从字符串中获取值,可以执行以下操作:

<?php

    $string = "?&cName_1=fbe&cName_2=ege&cBirthday_1=r3rg&cBirthday_2=fev";
    $get = explode('&', $string ); // explode with and

    foreach ( $get as $key => $value) {
        $valn[ substr( $value, 0 , strpos( $value, '=' ) ) ] =  substr( $value, strpos( $value, '=' ) + 1 ) ;
    }
    // access your query param

    $cName_1 = $valn['cName_1'];
    $cName_2 = $valn['cName_2'];
    $cBirthday_1 = $valn['cBirthday_1'];
    $cBirthday_2 = $valn['cBirthday_2'];

?>