2014-01-13 4 views
0

MySQLi 문 또는 PDO를 사용하여 다음 작업을 수행하려고했지만 서버에서 많은 오류가 발생했습니다.이 MySQLi는 안전한가요?

내가 수행 한 코드를 배우려면 다음 예제를 사용해도 안전하고 괜찮은지 확인하십시오. 그리고 다음 코드는 새로운 MySQLi 사용자가 적어도 MySQLi로 시작하는 방법을 배우는 데 도움이 될 것입니다.

<?php 
$host = "localhost"; 
$username = "db_user"; 
$password = "db_pass"; 
$dbname = "db_name"; 
@ $db = mysqli_connect($host, $username, $password, $dbname); 
if(mysqli_connect_errno()) 
{ 
    die("Connection could not be established"); 
} 
$username = mysqli_real_escape_string($db, $_GET['user']); 
$query = ("SELECT * FROM members WHERE profile='$username' ORDER BY id DESC LIMIT 1"); 
$result = mysqli_query($db, $query); 
while($row = mysqli_fetch_array($result)) 
{ 
?> 

PROFILE VIEW 

    <br>Name: <?php echo $row['nombre']?> ID: <?php echo $row['Age']?> <br /> 




<?php 
} 
?> 

모두 잘 작동합니다. 누군가가 그것을 더 안전하게 만들 수 있다면, 나는 그것을 고맙게 생각할 것입니다.

+6

가장 안전한 가정은 사용자 데이터가 항상 악의적 인 것입니다. 두 번째로 가장 안전한 가정은 매개 변수화 된 입력이있는 prepared statement를 항상 사용하는 것입니다. –

+1

대문자로 사용하지 마십시오. 당신은 2 가지 다른 것들에 대해 변수를 재사용합니다, 나는 그 안전이라고 부르지 않습니다. 나는 또한 사용자 입력을 더 위생적으로 만들 것이다. $ query = (""); 유효하지만 문자열을 정의하는 방법이 아닙니다. 그 주변의 (와)를 제거 할 수 있습니다. –

+5

이 질문은 [codereview] (http://codereview.stackexchange.com/) – Quentin

답변

1

나는 이것과 함께 갈 것이다.

<?php 
$host = "localhost"; 
$username = "db_user"; 
$password = "db_pass"; 
$dbname = "db_name"; 
$db = mysqli_connect($host, $username, $password, $dbname); 
if(mysqli_connect_errno()) { 
die("Connection could not be established"); 
} 
$username = $_GET['user']; 
$query = $db->prepare("SELECT * FROM `members` WHERE `profile` = ? ORDER BY `id` DESC LIMIT 1"); 
$query->bind_param('s', $username); 
$query->execute(); 
while($row = $query->fetch_row()) { ?> 

<br />Name: <?php echo $row['nombre']; ?> ID: <?php echo $row['Age']; ?> <br /><?php 
} ?> 
+0

을 요청하기 때문에 주제가 아닌 것 같습니다. 치명적인 오류 : 정의되지 않은 메서드를 호출하십시오 mysqli_stmt :: fetch_row() – Firefighter

+0

' '-> execute()'다음에 $ query에 대해 var_dump()를 사용합니까? – Mave