2013-04-05 3 views
0

데이터베이스가 있습니다. 이전에 작성되지 않은 DB가 하나의 행만 포함 된 테이블을 만들었습니다.데이터베이스의 세션 필드를 업데이트하십시오.

이유는 단지 1 행을 가지고 있기 때문에 일부 정보를 유지하는 데 사용하는 것입니다. 여기가 내가 저장 세션 ID, 에 사용할 TYPE NVARCHAR(100)의 분야이며,

나를 위해 두통을 제공 :

내가조차 제대로 (나는 phpmyadmin를 사용하여 삽입 할 수없는 것 같다 확인하고 비어 있음) session_id()에서 얻은 세션 ID로 string으로 반환 된 UPDATE (구문 오류 ...). 여기

내 코드의 일부는 내 행동에 관한됩니다 :

//uamip,uamport is in URL;I use $_GET[] 

$_SESSION[uamport] = $_GET['uamport']; 

$_SESSION[uamip] = $_GET['uamip']; 

**$_SESSION[sid] = session_id();** 

//construct 

$sql="CREATE TABLE trans_vector(

     `index` INT NOT NULL AUTO_INCREMENT, 
     `sid` NVARCHAR(100), 
     `uamip` CHAR(15), 
     `uamport` INT, 
     PRIMARY KEY (`index`) 
    )" ; 

mysql_query($sql); 

//insert(first time, so not constructed) 

$sql="INSERT INTO trans_vector (sid,uamip,uamport) VALUES(

     '$_SESSION[sid]', 
     '$_SESSION[myuamip]', 
     '$_SESSION[myuamport]' 
    )"; 

mysql_query($sql); 

//update(from 2nd time and later, table exists, so I want to update the sid part) 

$sql="UPDATE trans_vector SET sid="**.**$_SESSION[sid]; 

mysql_query($sql) 

를 자, 내가 확인하면 phpMyAdmin을 사용할 때 sid fieldINSERT 또는 UPDATE, 후에는 빈이다; 나는이 작업을 수행 할 경우

그러나 :

$vector=mysql_fetch_array(mysql_query("SELECT TABLES LIKE 'trans_vector'")); 

echo $vector[sid], 다음은 웹 페이지에 인쇄.

또 다른 질문이입니다 :

위의 UPDATE 문으로

, 난 항상 같은 오류 얻을 :

"알 수없는 열 XXXXXX를 .... (일부 세션 ID가 반환, 그것은 항상 보인다 번역 처음으로 그리고 SQL 문에 넣으십시오. ** 원하는 이름이 아니므로 ** 열을 처리하십시오.) "

CREATE 문에서 TYPE을 시도하고 UPDATE 문의 구문을 많이 사용했습니다. (모든 것 !!!)하지만 나는 항상이 오류를 제공합니다.

나는 '과 관련된 문제를 다루고 있는데, 그 변수의 값은 실제로 내가 원하는 것입니다 ... 그리고 어쩌면 문제가 발생하여 UPDATE 문에 CREATE 및 문자열 표현의 유형에서 발생합니까?

내게 도움이 될 CAST() 성명이 필요합니까?

위와 같이 처리 할 수 ​​있도록 도와주세요. 아마도 PHP에 그런 문제의 실제 참조를 나열 하시겠습니까?

감사합니다.

답변

2
$insert = "INSERT INTO trans_vector (`sid`, `uamip`, `uamport`) VALUES(

     '".$_SESSION["sid"]."', 
     '".$_SESSION["myuamip"]."', 
     '".$_SESSION["myuamport"]."' 
    )"; 

오류가 아니라면 적어도 몇 가지 경고를 해결해야합니다.

및 업데이트에 대한

...

$update = "UPDATE trans_vector SET `sid`='".$_SESSION["sid"]."';"; 

노트 코드에 대해 : 배열 값은 연산자 문자열에 투입되어야한다 '.' 직접 삽입 할 수 없습니다. 배열 색인은 문자열이어야합니다 (") 또는 정수를 기록하십시오).

열 이름은 "주위에"있어야합니다. SQL과 함께 문자열을 삽입하려면 문자열을 ''에 넣어야하므로 파서는 문자열과 열 이름을 알고 있습니다. 파서가 없다면 당신은 칼럼을 쓰고 있다고 가정하고 있습니다.

그리고 mysql_escape_string의 경우 세션에 데이터를 저장하기 전에 데이터를 처리한다고 가정했습니다. 그것들이 없으면 원치 않는 SQL 주입을 얻을 수 있습니다. 쿼리를 만들 때

foreach($_SESSION as $key => $value) 
    $_SESSION[$key] = mysql_escape_string($value); 

또는 수동으로 문자열을 탈출 : 그리고 경우에 당신은 그렇게하지 않았다, 당신은 그 (당신이 쿼리를 작성하기 전에) 할 수 있습니다.

+0

대단히 감사합니다! –

+0

나는 몇 가지 질문을 할 수있다 : 1. 배열 변수의 색인은 "또는 '로 인용되어야한다. 또는"문자열이된다 "는 말은 둘 다 사용할 수있다. 2. 나를 설명 할 수있다. $ _ SESSION [ "sid"]. " 'PHP executor에 의해 해결 되었기 때문에 나는 그것을 완전히 알아 내지 못했고, 왜 outest two가 필요한가? 그리고 두 가지를 넣는 것이 합리적 일까? [도트]가 변수 주위에 있습니까? 3. 백틱은 어떻게 작동합니까? [table_name]을 인용 할 때 어떻게 작동합니까? 4. $ sql = "[bla 's]"와 같은 sql 문은 반드시 있어야합니다. [bla 's]의 끝에서 SELECT 및 SHOW는 무엇입니까? –

+0

1. '및 "인덱싱 모두 잘 작동합니다. 2. SQL 쿼리에서 : 일반적으로 "로 시작하여 PHP 문자열을 시작합니다. 이렇게하면 'SQL 문자열로 사용하기가 쉽습니다. 이제 우리는 'SQL 문자열 시작, PHP 문자열 끝내기, 문자열에 뭔가 추가하기', '문자열 시작'문자열 추가, SQL 문자열 끝내기 등이 필요합니다. 3. "or"를 사용하여 색인을 생성해야하는 이유는 무엇입니까? 문자열로 지정하지 않으면 php는 $가없는 상수를 확인합니다. 4. 기술적으로는 필요하지 않습니다. SQL 쿼리에서.하지만 모든 쿼리를 끝내는 것이 좋습니다. 희망이 조금 도움이됩니다. – inzenir

0

업데이트 문에 대해서는 아포스트로피가없는 것이 분명합니다. 문자열 값을 데이터베이스에 삽입하려면 항상 아포스트로피가 필요합니다. 또한 mysql_real_escape_string을 사용해야합니다. 그러나 표준 mysql은 더 이상 사용되지 않으며 새로운 버전의 PHP에서는 MySQLi와 PDO를 위해 삭제 된 것으로 생각됩니다. 따라서 곧 MySQLi 또는 PDO로 전환해야합니다.

$_SESSION 범위의 값을 참조 할 때는 아포스트로피를 사용해야합니다. 그렇지 않으면 PHP는 sid이라는 이름을 가진 constanst를 찾은 다음 나중에 'sid' 문자열로 대체하려고합니다. 실제로 한 번 상수가 sid이라고 정의되면 문제가 발생할 것입니다. 여기

, MySQL의 라이브러리에 수정 된 업데이트 문 :

$sql = "UPDATE trans_vector SET sid='" . mysql_real_escape_string($_SESSION['sid']) . "'"; 

더 나은 :

$sql = "UPDATE `trans_vector` SET `sid`='" . mysql_real_escape_string($_SESSION['sid']) . "'"; 

역 따옴표를 사용하여이는 열 이름 것을 MySQL을위한 명확합니다. 때로는 SQL에 예약 된 키워드처럼 호출되는 열 이름을 갖게됩니다. 그렇다면 아포스트로피가 필요합니다. 일반적인 예로는 일련의 항목에 대해 order이라는 열이 있습니다.

+0

알겠습니다. 감사합니다! –

관련 문제