Вот юзай такое
if (!function_exists('saveTV')) {
function saveTV($contentid,$tv,$tvval){
global $modx;
if(is_numeric($tv)){
$tvid = $tv;
}else{
$table = $modx->getFullTableName('site_tmplvars');
$tvid = $modx->db->getValue( $modx->db->select( 'id', $table, 'name="'.$tv.'"' ) );
}
$table = $modx->getFullTableName('site_tmplvar_contentvalues');
$isset = $modx->db->getValue( $modx->db->select( 'count(*)', $table, "contentid=".$contentid." AND tmplvarid=".$tvid." " ) );
if($isset){
$modx->db->update(array('value'=>$tvval),$table,"contentid=".$contentid." AND tmplvarid=".$tvid);
}
else{
$modx->db->insert(array('contentid'=>$contentid,'tmplvarid'=>$tvid,'value'=>$tvval),$table);
}
}
}
а как же олдскульное insert on duplicate key update?