Esempio n. 1
0
function dbUpdate($oRow, $sTable, $mPrimary = "id", $pdo = null)
{
    $pdo = is_null($pdo) ? FlexiModelUtil::getInstance()->getXPDO() : $pdo;
    $bDebug = false;
    $aPrimary = !is_array($mPrimary) ? explode(",", $mPrimary . "") : $mPrimary;
    if ($bDebug) {
        echo __METHOD__ . ": primary:" . print_r($aPrimary, true) . "\n<br/>";
    }
    $aWhere = FlexiModelUtil::parseSQLCondKeyValue($aPrimary, $oRow);
    $sFields = "";
    $aParam = $aWhere["param"];
    foreach ($oRow as $sField => $sValue) {
        $sFieldRaw = dbCleanName($sField);
        $sFieldName = FlexiModelUtil::parseSQLName($sField);
        $sFields .= empty($sFields) ? "" : ",";
        $sFields .= $sFieldName . "=:_update_" . $sFieldRaw;
        $aParam[":_update_" . $sFieldRaw] = $oRow[$sField];
    }
    $sSQL = "UPDATE " . FlexiModelUtil::parseSQLName($sTable) . " SET " . $sFields . " WHERE " . $aWhere["sql"];
    if ($bDebug) {
        echo __METHOD__ . ": sql:" . $sSQL . "\n<br/>";
    }
    if ($bDebug) {
        echo __METHOD__ . ": param:" . print_r($aWhere["param"], true) . "\n<br/>";
    }
    $oStatement = $pdo->prepare($sSQL, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
    $mResult = $oStatement->execute($aParam);
    if ($mResult === false) {
        $aError = $oStatement->errorInfo();
        throw new Exception("Query failed: " . $aError[2] . ":" . $sSQL . ":" . print_r($aParam, true));
    }
    return $mResult;
}