2016-05-10 10 views
2

PHP配列をSQLクエリに変換しようとしましたが、データを更新していないようです。何か案は?なぜ私はデバッグダンプから何かを得ることができないように思える。PHP配列からSQLクエリ

$terms = count($getResource); 
foreach ($getResource as $field => $value) 
{ 
    $terms--; 
    $prepareStr .= $field . ' = :' . $field; 
    if ($terms) 
    { 
     $prepareStr .= ', '; 
    } 
} 

$terms = count($getResource); 
$executeStr .= "':settlementID'=>'$getSettlementID', "; 
foreach ($getResource as $field => $value) 
{ 
    $terms--; 
    $executeStr .= "':" . $field . "'=>'" . $value . "'"; 
    if ($terms) 
    { 
     $executeStr .= ', '; 
    } 
} 


try 
{ 
    //update resources 
    $sqlupdate = $db->prepare("UPDATE settlements SET " . $prepareStr . " WHERE id = :settlementID"); 

    $sqlupdate->execute(array($executeStr)); 
} 
catch (PDOException $e) 
{ 
    echo "Error: " . $e->getMessage(); 
} 

$sqlupdate->debugDumpParams(); 
} 
+1

'settlementID'の値をバインドする必要があります。 –

+0

$ executeStr。= "':settlementID '=>' $ getSettlementID '、"; これでは不十分ですか? – MrBig

+1

なぜ 'array(string)'を 'execute'に渡しますか?値の配列を渡すだけです: 'array( ':settlementID' => $ getSettlementID)' –

答えて

0

このシナリオでは、名前付きプレースホルダは冗長です。

// Assume $getResource has key-value structure for update 
$list = array_map(function($field){ 
    return "$field = ?"; 
}, array_keys($getResource)); 
$strData = implode(", ", $list); 

$params = array_values($getResource); 
$params[] = $settlementId; 

$prepareSql = "UPDATE $tableName SET $strData WHERE id = ?"; 

$sth = $db->prepare($prepareSql); 
$sth->execute($params);