循环中的bindParam总是写入最后一个值

时间:2018-07-14 17:51:24

标签: mysql pdo bindparam

我无法在嵌套的foreach循环中更新数据数组。我已经在SO上阅读了许多类似的问题,但是没有使用嵌套的foreach(请参阅我的数组模式),答案似乎是在值上使用“按引用”运算符“&”-但这对我不起作用。香港专业教育学院试图在外部循环var上使用'by ref'运算符,因为它似乎是逻辑上的,但无济于事。这是我的代码和数组转储:

输入数组模式:

array (
  0 => 
  array (
    'ReviewDate' => '2016-05-08 00:00:00',
    'ReviewDetails' => 'Release pending',
    'RentAmount' => '112000.00',
    'ReviewComplete' => 1,
  ),
  1 => 
  array (
    'ReviewDate' => '2022-10-25 00:00:00',
    'ReviewDetails' => 'Short-hold still open',
    'RentAmount' => '21000.00',
    'ReviewComplete' => 0,
  ),
)

这是我准备好的声明:

'UPDATE rentals SET `ReviewDate`=:ReviewDate, `ReviewDetails`=:ReviewDetails, `RentAmount`=:RentAmount, `ReviewComplete`=:ReviewComplete WHERE agreemID=14'

我的代码是:

try 
{
    $cnx->beginTransaction();
    $stmt = $dbconx->prepare( $QryStr );

    foreach ( $formArr as $tbl => $rec ) 
    {
        foreach ( $rec as $key => &$val ) {
            $stmt->bindParam( $key, $val );
        }
    }
    $stmt->execute();

    $cnx->commit(); 
    return $stmt->rowCount();
}   
catch ( PDOException $e ) 
{
    $cnx->rollBack();  
    $this->applog->logerr( __FUNCTION__ ." - ".$e->getMessage() );
    return false;
}

数据库表的更新如下-您可以看到记录已被最终语句覆盖:

array (
  0 => 
  array (
    'ReviewDate' => '2022-10-25 00:00:00',
    'ReviewDetails' => 'Short-hold still open',
    'RentAmount' => '21000.00',
    'ReviewComplete' => 0,
  ),
  1 => 
  array (
    'ReviewDate' => '2022-10-25 00:00:00',
    'ReviewDetails' => 'Short-hold still open',
    'RentAmount' => '21000.00',
    'ReviewComplete' => 0,
  ),
)

这恰好是我在通过引用char使用“&”之前得到的-但是它对我不起作用,并且我的日志文件中没有错误。我的联系很好,因为我在其他任何地方都在使用它。我必须分别写出每个绑定吗?我试图避免这样做,因为我要更新30多个类似的表。任何帮助表示赞赏

0 个答案:

没有答案