2013-12-04 3 views
0

Я пытаюсь обновить поля, но только если значения, хранящиеся в сеансах, не равны нулю. вот мой код.Как использовать coalesce mysql

$query='update trac_patientprofiletable 
    set name= COALESCE(name,"'.$name.'"), 
     date_entered= COALESCE(date_entered,"'.$dateEntered.'"), 
     patientdisease= COALESCE(patientdisease,"'.$_SESSION['input']['sPatientDisease'].'"), 
     age= COALESCE(age,"'.$_SESSION['input']['sPatientAge'].'"), 
     weight= COALESCE(weight,"'.$_SESSION['input']['sPatientWeight'].'"), 
     maritalstatus= COALESCE(maritalstatus,"'.$_SESSION['input']['sPatientMaritalStatus'].'"), 
     sex= COALESCE(sex,"'.$_SESSION['input']['sPatientSex'].'"), 
     levelofeduca= COALESCE(levelofeduca,"'.$_SESSION['input']['sPatientEducationLevel'].'"), 
     diagnosis= COALESCE(diagnosis,"'.$_SESSION['input']['sPatientDiagnosis'].'"), 
     tbgroup= COALESCE(tbgroup,"'.$_SESSION['input']['sPatientTBgroup'].'"), 
     cd4count= COALESCE(cd4count,"'.$_SESSION['input']['sPatientCD4Count'].'"), 
     typeofart= COALESCE(typeofart,"'.$_SESSION['input']['sPatientARTRegimen'].'"), 
     patientmobileno1= COALESCE(patientmobileno1,"'.$_SESSION['input']['sPatientPhoneNo'].'"), 
     language= COALESCE(language,"'.$_SESSION['input']['sPatientCallLanguage'].'"), 
     oiprophylaxis= COALESCE(oiprophylaxis,"'.$_SESSION['input']['sPatientOIProhylaxis'].'"), 
     eligibleforart= COALESCE(eligibleforart,"'.$_SESSION['input']['sPatientEligibleART'].'"), 
     dateartinitiated= COALESCE(dateartinitiated,"'.$_SESSION['input']['sPatientARTDate'].'") 
    where patientid="'.$_SESSION['patientid'].'"';   
    $result=mysql_query($query) or die ("query error: ".mysql_error()); 

не существует синтаксической ошибки. Но не обновляется данные в базе данных. соединение уже установлено (очевидно, здесь не показано). Помоги пожалуйста.

+0

Будем надеяться, что ни одна из ваших переменных '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' – h2ooooooo

+0

[** Пожалуйста, не используйте 'mysql_ *' функции в новом коде **) (http://bit.ly/phpmsql). Они больше не поддерживаются [и официально устарели] (https://wiki.php.net/rfc/mysql_deprecation). См. [** красное поле **] (http://j.mp/Te9zIL)? Узнайте о [* подготовленных операторах *] (http://j.mp/T9hLWi) и используйте [PDO] (http://php.net/pdo) или [MySQLi] (http://php.net/ mysqli) - [эта статья] (http://j.mp/QEx8IB) поможет вам решить, какой из них. Если вы выберете PDO, [здесь хороший учебник] (http://j.mp/PoWehJ). – h2ooooooo

+0

Замечания @ h2ooooooo особенно важны, поскольку вы обрабатываете данные пациента. Будьте предельно осведомлены о своих способностях/ограничениях в отношении безопасности в Интернете - существенный юридический и психологический ущерб, который может быть вызван утечками медицинских данных. – halfer

ответ

2

Изменить все ваши COALESCE параметров быть наоборот:

oiprophylaxis= COALESCE(oiprophylaxis,"'.$_SESSION['input']['sPatientOIProhylaxis'].'") 

в

oiprophylaxis= COALESCE("'.$_SESSION['input']['sPatientOIProhylaxis'].'",oiprophylaxis) 

COALESCE возвращает крайнее левое ненулевое значение, с текущим использованием это говорит только обновить oiprophylaxis с новое значение, если oiprophylaxis в настоящее время является NULL.

Что вы хотите, наоборот, обновите только oiprophylaxis с новым значением, если новое значение не равно NULL.

На самом деле, это только часть вашей проблемы, поскольку вы обмениваете значения в кавычках, и никакое цитируемое значение никогда не будет NULL. К счастью, часть вашей проблемы будет решена, если вы возьмете совет h2ooooooo и вместо этого будете использовать подготовленный оператор.

Смежные вопросы