【问题标题】:Grab Parameters And Query in PHP在 PHP 中获取参数和查询
【发布时间】:2018-07-26 22:47:48
【问题描述】:

我正在向我的 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);
}

【问题讨论】:

  • 不确定你想做什么。您是说您的 get 请求中有参数 Name_1, Name_2 ... Name_10 & Birthday_1, Birthday_2 ... Birthday_10 并且您需要提取它们的值并将它们传递给 Name & Birthday 为 _1, _2 和等到_10?
  • 是的,这正是我想要做的!
  • 您对 SQL 注入攻击持开放态度。检查How can I prevent SQL injection in PHP?
  • 如果您传递一个 JSON 结构(最好通过 POST),这会容易得多。有这种可能吗?

标签: php sql parameters query-string


【解决方案1】:

您可以通过使用方括号来表示数组索引/键,对 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();
}

【讨论】:

    【解决方案2】:

    要从字符串中获取值,您可以这样做:

    <?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'];
    
    ?>
    

    【讨论】:

      猜你喜欢
      • 2013-10-03
      • 2021-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多