【问题标题】:pdo prepared statement multiple execution?pdo准备好的语句多次执行?
【发布时间】:2012-02-16 01:08:58
【问题描述】:

我刚要在我的站点中实现 PDO,但我想知道是否可以多次执行准备好的语句?

$SQL = $dbh->prepare("SELECT * FROM user WHERE id=? AND users=?");
$SQL -> execute(array($id,$userid));
while($check = $SQL -> fetchObject()){

然后我会为这个 SQL 使用一个 while 循环

我可以在 while 循环中使用相同的 $SQL 进行另一个执行吗?这样我就不用再输入prepared statement了?

$SQL -> execute(array($id2,$userid2));
while($check2 = $SQL ->fetchObject(){
//while loops for second execution, but I'm not sure how it works cause 
//its using the same $SQL?
    }
    }//this end bracket is for the first while loop

【问题讨论】:

    标签: php pdo prepared-statement execute


    【解决方案1】:

    是的,您可以重复使用相同的准备好的语句,但不能重复使用问题中的方式。您尝试做的与这样做基本相同:

    for ($i=0; $i<$some_number; $i++) {
        echo $i."\n";
        for ($i=0; $i<$some_number; $i++) {
            // do something
        }
    }
    

    第二个for 循环移动与原始循环相同的指针,因此上面的输出将简单地为“0”,表示原始for 循环仅发生一次。

    因此,为了解决这个问题,您需要将第一个 execute 的结果存储到一个数组中,然后对其进行迭代。这样你就不用担心任何指针了

    $SQL = $dbh->prepare("SELECT * FROM user WHERE id=? AND users=?");
    $SQL->execute(array($id,$userid));
    $checks = $SQL->fetchAll();
    foreach ($checks as $check) {
        $SQL->execute(array($id2,$userid2));
        while ($check2 = $SQL->fetchObject(){
            //while loops for second execution
        }
    }
    

    这样,您使用的是完全相同的预处理语句(这很好),并且原始的$check 变量可用于while 循环。

    然而,话虽如此,我有一种强烈的预感,您可能可以将所有内容都放入一个 SQL 查询中,而无需像这样循环。

    【讨论】:

      【解决方案2】:

      是的,这是可能的。一次准备,根据需要执行多次。

      当然,我不确定您为什么要在循环中执行 SELECT... 这通常没有多大意义。

      【讨论】:

      • 如何获取数据库?我不确定,我曾经使用过旧方法 mysql_query("SELECT...
      • @andrewliu,不清楚你在问什么。为什么不选择一次并遍历结果数据?你为什么要一遍遍地@​​987654322@?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-30
      • 1970-01-01
      • 2011-04-23
      • 2010-11-21
      • 2012-08-12
      相关资源
      最近更新 更多