2012-07-10 2 views
0

일부 코드는 데이터 선택과 함께 행 번호가 0인지 확인한 다음 삽입하여 정상 프로세스를 계속합니다. 문제는 정상적인 프로세스가 insert 전에 저장 되었기 때문에 존재하지 않는 문 select에 의존한다는 것입니다. ajax 나 html과 관련없는 PHP 내에서 데이터 요청을 새로 고치는 방법은 무엇입니까?PHP mysql 새로 고침 선택 데이터

$user = $_GET['user']; // not stored user 
$select = mysql_query("SELECT * FROM `table` WHERE username = ".$user); 
$row = mysql_fetch_array($select); 
$rownum = mysql_num_rows($select); 
if(!$rownum){ 
    mysql_query("INSERT INTO table (username, something) VALUES ('$user', 1)"); 
} 

/* Here comes the problem */ 
if($row['something'] == 0){ 
    die("Not found !"); // THIS if returns true since it was not found at first place before inserting 
         // i want it to refresh the $select data so it could be read as 1 

} 

는 내가 지금까지 반복

if(!$rownum){ 
    mysql_query("INSERT INTO table (username, something) VALUES ('$user', 1)"); 
} 
$select = mysql_query("SELECT * FROM `table` WHERE username = ".$user); 
$row = mysql_fetch_array($select); 
    [..] 

나는 간단한 방법이

+0

당신은'GetData()'함수를 만들고 그 안에서'select'를 움직여 그 함수를 호출 할 수 있습니다. 'insert' 후에 데이터를 얻기 위해서는'select' 쿼리를 실행해야합니다. –

+0

@rs. 그래, 나도 알아,하지만 난 그것을 할 가장 간단한 방법을 찾고 있는데 – Osa

+0

샘플 코드는 [SQL injection] (http://unixwiz.net/techtips/sql-injection.html)에 취약하다. 심각한 [보안 위험] (http://bobby-tables.com/). 이 구멍을 고치려면 오래된 MySQL 확장에서 [PDO] (http://php.net/PDO)로 전환하고 [prepared statements] (http://www.php.net/PDO.prepared-statements)를 사용하십시오. 값을 매개 변수로 전달하여 직접 문자열로 보간하는 것이 아니라 명령문에 전달합니다. PDO 튜토리얼이 필요하면 [ "PHP와 PDO로 MySQL 스크립트 작성하기"(http://www.kitebird.com/articles/php-pdo.html)]를 시도하십시오. 저장하는 사이트는 귀하의 사이트 일 수 있습니다. – outis

답변

1
을 할 insert 문 아래 $select$row 코드를 사용하는 것입니다 해결 방법 : 여기에서 설명하는 예입니다

새로 생성 된 레코드에서 whats를 알고 있다면 $ row = array ('username'-> 'bob', ...) 배열을 새로 만들 수 있습니다.

하지만 테이블에 기본값이 있거나 나중에 다른 것을 추가하는 경우 두 번째 선택을해야합니다.

$user=urldecode($_GET['user']); 
$result=mysql_query("SELECT * FROM `table` WHERE username='".mysql_real_escape_string($user)."'"); 
if(!$result) die("SQL ERROR"); 

if(mysql_num_rows($result)>0) 
{ 
    $row = mysql_fetch_array($select); 
} 
else 
{ 
    mysql_query("INSERT INTO table (username, something) VALUES ('".mysql_real_escape_string($user)."', 1)"); 

    $result=mysql_query("SELECT * FROM `table` WHERE username='".mysql_real_escape_string($user)."'"); 
    if(!$result) die("SQL ERROR"); 
    if(mysql_num_rows($result)==0) die("MAJOR ERRORS IN SQL"); 

    $row = mysql_fetch_array($result); 
} 

나는 당신이 쿼리를 실행 한 결과이므로 $ result를 사용하는 것을 선호합니다.

+0

이것은 OP가 현재 사용하고있는 시스템이므로 mysql_query로 롤백했다. – Waygood