【问题标题】:PHP passing array to PDO bindParam [duplicate]PHP将数组传递给PDO bindParam [重复]
【发布时间】:2016-01-19 05:59:01
【问题描述】:

PDO 参数:

$cto=new PDO("mysql:host=$servername;dbname=$dbname",$username,$password);

与数据库交互

$csql=$cto->prepare("INSERT INTO `users`(`username`, `password`, `class`, `is_on`, `time_log`, `IP`)
        VALUES (:name,:pass,:class,0,0,'0')");
        $pr=[
          ':name' => $_POST['username'],
          ":pass" => $_POST['password'],
          ":class" => $_POST["class"],
        ];
        $csql->execute($pr);
        $cto=null;

我的问题是,我目前在执行中使用数组 $pr,我可以使用 bindParam 传递这个数组

$csql->bindParam($pr);
$csql->exec();

感谢您的宝贵时间。

【问题讨论】:

  • no, as ->bindParam() - a 参数绑定到指定的变量名。另一种方法是循环执行。 IE。 foreach($pr as $key=>$val){$csql->bindParam($key,$val);}

标签: php mysql pdo


【解决方案1】:

您可以通过这种方式在单行中使用bindParam()

$csql=$cto->prepare("INSERT INTO `users`(`username`, `password`, `class`, `is_on`, `time_log`, `IP`)
VALUES (:name,:pass,:class,0,0,'0')");

//Looping for all values into array...
foreach ($pr as $key => &$val) {
    $csql->bindParam($key, $val);
}
$csql->execute();

希望对您有所帮助!

【讨论】:

    【解决方案2】:

    是的,你必须为每个 bindParam() 做一行,如果你想将多个值绑定到一个数组中,请在 excute() 中尝试它

    http://php.net/manual/en/pdostatement.bindparam.php

    【讨论】:

      【解决方案3】:

      如果您不想通过引用传递bindParam,也可以使用bindValue

      foreach ($pr as $key => &$val) {
          $csql->bindValue($key, $val);
      }
      

      【讨论】:

        【解决方案4】:

        您可以在 execute() 中将所有参数作为数组传递。

        这适用于可变参数大小,事先不知道,并且避免了可能导致错误的循环。

        $inputArray : input parameters in array format
        

        //第1步:创建格式为?,?,?的占位符

        $placeholders = str_repeat('?,', count($inputArray) - 1) . '?';
        

        //第二步:创建查询

        $query = "  select *
                    from table
                    where column in ($placeholders)";
        

        //第三步:照常准备

        $st = $this->db()->prepare($query);
        

        //第四步:在执行中发送值

        $st->execute($inputArray);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-01-11
          • 2014-08-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-20
          相关资源
          最近更新 更多