2011-08-09 3 views
0

실제로 뭔가 붙어 있습니다. 나는 데이터베이스를 업데이트하려고 노력하고 코드가 작성된 것처럼 보입니다 - 그리고 그것을 반향하여 phpMyAdmin에 직접 붙여 넣으면 완벽하게 작동합니다 -하지만 코드 자체는 작동하지 않습니다 ... 지금까지 하루를 보내고 있습니다. 그것이 작동하지 않는 이유를 파악하고 난sql 문은 phpMyAdmin에서 작동하지만 mysql_query에서는 작동하지 않습니다.

function restoreSession() 
{ 

mysql_connect("theHost", "root", "rootPWD") or die(mysql_error()); 
mysql_select_db("myDatabase") or die(mysql_error());  

$restore_cmd = 'UPDATE wp_dor_cart66_sessions SET user_data = (SELECT user_data FROM wp_dor_cart66_stored_sessions WHERE ip_address = "' . $_SERVER['REMOTE_ADDR'] . '")'; 

$clean_up = "DELETE FROM `wp_dor_cart66_sessions` WHERE `ip_address` = \"" . $_SERVER['REMOTE_ADDR'] . "\" AND id NOT IN (SELECT id FROM (SELECT id FROM `wp_dor_cart66_sessions` ORDER BY id DESC LIMIT 1) user_data)"; 

mysql_query($clean_up) or die('Query failed: ' . mysql_error()); 
$result = mysql_query($restore_cmd) or die('Query failed: ' . mysql_error()); 
echo "<br/>"; 
echo $restore_cmd; 
echo "<br/>"; 
var_dump($result); 
echo "<br/>"; 
print_r($result); 
} 

결과 출력의 모습 ... 아이디어에서 완전히 해요 :

UPDATE wp_dor_cart66_sessions SET user_data = 
(SELECT user_data FROM wp_dor_cart66_stored_sessions 
WHERE ip_address = "196.54.110.24"); 

bool(true) 

1 

어떤 오류가 표시되지 않습니다 -하지만 그냥 업데이트 할 수 없습니다. phpMyAdmin에서 작동하지 않는다면 SQL에 문제가 있다는 것을 알 수 있습니다.하지만 제대로 된 것 같습니다 ... 저는 아이디어가 정말 부족합니다. 도움을 주시면 대단히 감사하겠습니다! 여기


일부 서식이 다시 문입니다 필요

$restore_cmd = ' 
    UPDATE 
     wp_dor_cart66_sessions 
    SET 
     user_data = (
      SELECT 
       user_data 
      FROM 
       wp_dor_cart66_stored_sessions 
      WHERE 
       ip_address = "' . $_SERVER['REMOTE_ADDR'] . '" 
     ) 
'; 

$clean_up = " 
    DELETE FROM 
     `wp_dor_cart66_sessions` 
    WHERE 
     `ip_address` = \"" . $_SERVER['REMOTE_ADDR'] . "\" 
     AND id NOT IN (
      SELECT 
       id 
      FROM 
       (
        SELECT 
         id 
        FROM 
         `wp_dor_cart66_sessions` 
        ORDER BY 
         id DESC 
        LIMIT 
         1 
       ) user_data 
     ) 
"; 
+0

나 혼자만해도 좋을지 모르지만 두 번째 쿼리 (삭제 ... 안 ...)가 어떻게 작동할까요? – VolkerK

+0

감사합니다. 그 서식은 읽기가 훨씬 쉽습니다. delete 문이 작동하는 방식은 특정 IP 주소를 가진 모든 세션을 선택한 다음 선택 항목에없는 모든 항목을 삭제한다는 것입니다. 선택 항목에는 한도가 있습니다. 따라서 가장 최근 레코드를 제외한 모든 항목이 삭제됩니다. 내가 몇 번 삭제를 테스트하고 지금까지 작동했습니다 ... – Brendan

+0

하지만 내부 선택 어떻게 든 IP 주소 (예 : ip = remote_addr에 대한 그룹 현명한 최대 선택)와 관련해서는 안됩니까? 지금은 그렇지 않습니다. 항상 wp_dor_cart66_sessions에서 _all_ 레코드 중 가장 높은 ID를 선택합니다. – VolkerK

답변

0
$restore_cmd = 'UPDATE wp_dor_cart66_sessions SET user_data = (SELECT user_data FROM wp_dor_cart66_stored_sessions WHERE ip_address = \"' . $_SERVER['REMOTE_ADDR'] . '\")'; 

+0

전에 시도했는데 ... 슬래시를 추가하면 오류가 발생합니다. 문자 그대로 이스케이프 문자가 나오는 한 모든 조합을 문자 그대로 시도했습니다 ... 아직까지는 아무 것도 작동하지 않습니다. 어쨌든 덕분입니다. .. – Brendan

0

오류를 인용 것 같은데 인용 부호를 탈출이 시도 :

"UPDATE wp_dor_cart66_sessions SET user_data = (SELECT user_data FROM wp_dor_cart66_stored_sessions WHERE ip_address = '" . $_SERVER['REMOTE_ADDR'] . "')";
+0

좋은 제안 -하지만 같은 결과. 그것은 오류가 발생하지 않았지만 데이터베이스에서 아무것도 업데이트되지 않은 상태에서 작동했습니다 ... echoedd 결과를 phpMyAdmin에 붙여 넣었습니다. 그러나 아무런 문제가 없었습니다 ... 이것이 왜 그렇게 신비로운 일인지에 대한 것입니다. .. – Brendan

+0

$ _SERVER [ 'REMOTE_ADDR']이 (가) 예상 한 것을 반환합니까? –

+0

예 - 내가 기대했던 것을 되돌리고있었습니다. 위에서 설명한 것처럼 SQL 명령을 단순화하여 결국이 작업을 얻었습니다 ... – Brendan

0

그럴 수 있다면 SELECT에 여러 결과가 있습니다. 당신이 할 경우 ...

$restore_cmd = 'UPDATE wp_dor_cart66_sessions SET user_data = (SELECT user_data FROM wp_dor_cart66_stored_sessions WHERE ip_address = "' . $_SERVER['REMOTE_ADDR'] . '" LIMIT 1)'; 

...주의

+0

흥미로운 제안 ... 하나 이상의 결과가 없어야합니다. - 전에 쿼리를 수행하면 최신 행을 제외하고 모두 삭제되기 때문입니다. 나는 그것을 시도했지만 불행히도 같은 결과 - 아무 일도 없었습니다 ... – Brendan

0

1은 첫 번째 쿼리가 일치하는 모든 행을 삭제되지 않았는지 확인하는 LIMIT?

첫 번째 쿼리 끝에 "user_data"부분을 이해하지 못합니다. 그러나 각 쿼리 이후에 영향을받는 행의 수를 확인하여 쿼리가 데이터에 어떤 영향을 미치는지 확인하고 그렇지 않은 경우 논리적 인 실수가 있는지 확인합니다.

+0

그건 재미있는 생각이지만, 나는 그게 아니라고 확신합니다. 이전에 삭제 라인을 주석 처리 했으므로 삭제 된 항목이 없는지 확인했습니다. 여전히 작동하지 않았습니다. – Brendan

관련 문제