2012-09-07 3 views
0
$user = mysql_real_escape_string($_POST["userlogin"]); 

    mysql_connect("uritomyhost","myusername","password"); 
    mysql_select_db('mydatabase'); 
    mysql_query('UPDATE table SET field = field + ($userlogin)'); 

이 요청은 userlogin을 게시 요청에서 가져 와서 내 SQL 쿼리에 삽입하는 올바른 방법입니까? mysql을 연결 한 후PHP 변수를 SQL 쿼리에 전달

+0

사용자 제공 값이있는 데이터베이스 필드에 +를 사용하면 어떤 점이 있습니까? –

답변

0

사용 mysql_real_escape_string() 및 사용 따옴표

mysql_query("UPDATE table SET field = field + ({$userlogin})"); 
+0

작은 따옴표를 사용하는 경우이를 추가하려면 [변수가 확장되지 않습니다.] (http://php.net/manual/en/language.types.string.php#language.types.string.syntax.single) ** * Edit *** : 그리고'$ userlogin' 대신 변수'$ user'를 호출하는 것처럼 보입니다. – h2ooooooo

0

당신은
그래서 여기에 코드를 변경 ... 단지 데이터베이스에 연결 한 후) mysql_real_scape_string를 (사용해야합니다

mysql_connect("uritomyhost","myusername","password"); 
mysql_select_db('mydatabase'); 
$userlogin = mysql_real_escape_string($_POST["userlogin"]); 
mysql_query("UPDATE table SET field = '$userlogin'"); 
0

이렇게 해보십시오. 당신 쿼리 및 사용 준비된 문합니다 (내가 통지)에 대한

$user = mysql_real_escape_string($_POST["userlogin"]); 

mysql_connect("uritomyhost","myusername","password"); 
mysql_select_db('mydatabase'); 
mysql_query("UPDATE table SET field = value where user='$user'"); 
0

사용 mysqli_query. 준비된 문을 사용하면 직선 쿼리를 사용하고 쿼리 문자열에 변수를 포함하는 것보다 안전합니다. 게다가, mysql은 곧 비추천 될 것이다. 예 :

<?php 
$mysqli = new mysqli("localhost", "my_user", "my_password", "world"); 
/* check connection */ 
if (mysqli_connect_errno()) { 
printf("Connect failed: %s\n", mysqli_connect_error()); 
exit(); 
} 
$city = "Amersfoort"; 
/* create a prepared statement */ 
if ($stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")) { 

/* bind parameters for markers */ 
$stmt->bind_param("s", $city); 

/* execute query */ 
$stmt->execute(); 

/* bind result variables */ 
$stmt->bind_result($district); 

/* fetch value */ 
$stmt->fetch(); 

printf("%s is in district %s\n", $city, $district); 

/* close statement */ 
$stmt->close(); 
} 
/* close connection */ 
$mysqli->close(); 
?> 
+0

Mysqli는 이런 식으로 사용될 때 더 안전하지 않습니다. Mysqli는 [PDO] (http://php.net)처럼 [prepared statements] (http://www.php.net/manual/en/mysqli.prepare.php)를 사용할 때 ** 안전 ** **입니다. /manual/en/book.pdo.php) – h2ooooooo

+0

예, 죄송합니다. 내 대답을 편집하는 것을 잊어 버렸습니다. – harshit

+0

오를 생각 나게 해 줘서 고마워. 이제 알았어! – user1431627

0

당신이 당신의 UPDATE 절에 어떤 곳이 없기 때문에 당신은 당신의 테이블의 모든 필드를 업데이트 할 수 있습니다

해야하지, 그러나이

mysql_query("UPDATE table SET field = field + ('$user')"); 

시도 오히려 그럴거야

mysql_query("UPDATE table SET field = field WHERE user= '$user'"); 
0

Update 대신 INSERT을 사용하고 싶다고 생각합니다. 왜 field = field + ($userlogin)일까요? 이것은 값을 연결합니다. 그리고 한 가지 더는 PDO 확장을 사용하는 PDO 또는 MYSQLI

예를 사용하십시오 :

<?php 

    $stmt = $dbh->prepare("INSERT INTO tanlename (field) VALUES (?)"); 
    $stmt->bindParam(1, $user); 
    $stmt->execute(); 

?> 
+0

현재 값으로 계산됩니까? – user1431627

5

정지 오래된 기능을 사용하는 대신 PDO를 사용합니다.

$stmt = PDO::prepare('UPDATE table SET field = field + :field'); 
$stmt->execute(array('field' => $_POST["userlogin"])); 

일부는 information about PDO입니다. 간단히 말해서 : 그것은 당신을 위해 데이터를 이스케이프 처리하며, 데이터베이스 전반에 걸쳐 일관되고 일반적으로 훨씬 쉽습니다.

+0

어떻게 연결해야합니까? 이것은 ths 값만을 가져 와서 삽입합니다. 이 코드를 사용하여 데이터베이스에 어떻게 로그인합니까? – user1431627

+0

[__construct] (http://www.php.net/manual/en/pdo.construct.php)를 사용하십시오. 해당 페이지의 예제를 참조하십시오. –

+0

어떻게 정의합니까? – user1431627

관련 문제