2016-06-10 1 views
0

SQL 쿼리에서 변수를 사용하기위한 올바른 형식은 무엇입니까? 네, 코드가 안전하지 않다는 것을 알고 있습니다. 왜냐하면 해시 코드와 다른 결함이 없기 때문에 코드가 안전하지 않기 때문에 작동하지 않습니다.PHP에서 SQL 쿼리의 변수를 올바르게 사용하는 방법은 무엇입니까?

include 'config/database.php'; // DB connection. 
$password = mysql_real_escape_string($_POST['password']); 
$sql = 'INSERT INTO `login` (`id`, `username`, `password`, `question`) VALUES (NULL, \'test\', \$password\, \'test\')'; 

if (mysqli_query($con, $sql)) 
{ 
echo 'Done!'; 
} 

else 
{ 
echo 'No.'; 
} 

mysqli_close($con); 

오류

Connection worked! 

Fatal error: Uncaught Error: Call to undefined function mysql_real_escape_string() in C:\xampp\htdocs\hashing\password.php:3 Stack trace: #0 {main} thrown in C:\xampp\htdocs\hashing\password.php on line 3

그것의 단순한 PHP 양식 그 다음 PHP 스크립트 게시물. 나는 또한 phpMyAdmin에서 포맷 된 SQL 쿼리를 가지고있다. 감사!

+0

당신의 PHP 설치가 아마하지 않았다 , 질문 : (당신이 $ 암호를 해석하지 않는 작은 따옴표를 사용하여 SQL 쿼리에주의), 그와 같은 더 'mysql *'확장 기능을 제공합니다. mysqli *가 설치되어있을 수도있다. mysql_real_escape_string()'=>'mysqli_real_escape_string()'. 이것은 보안 문제에 도움이되지 않지만. – HPierce

+0

_not_ 수동으로 값을 이스케이프 처리하지 마십시오. 대신 안전한 사용을 위해 "매개 변수 바인딩"과 결합 된 "prepared statement"사용의 이점에 대해 읽으십시오. _이 모든 것은 문서화되어 있습니다. 문서를 읽어라! _ – arkascha

+0

PHP 7을 사용하고 있다면 mysql_ * 함수는 더 이상 사용할 수 없다. 나는 당신의'database.php'가 mysqli_ * 함수를 사용하고 있다고 가정합니다, 맞습니까? – MonkeyZeus

답변

-1

귀하 대신 MySQL을 MySQLi (즉, 지금은 사용되지 않습니다)와 함께해야한다 XAMPP, 그래서 당신은 또한 당신이 당신의 SQL 쿼리에 넣어 각 변수를 탈출해야하고, 포함하는 대신 mysql_real_escape_string($var)

mysqli_real_escape_string($var)을 사용해야합니다 그것 :)!

$sql = 'INSERT INTO 로그인 ( ID , 이름 , 비밀번호 ) VALUES (NULL, \'test\', \''.$password.'\', \'test\')';

+0

PHP 5.5.0에서 사용 중단되었습니다. 이제 완전히 삭제되었습니다. – MonkeyZeus

+0

그가 사용하고있는 PHP 버전을 알 수는 없지만 지금은 제거되었습니다. :) – Julqas

+0

다음을 수행하고 mysql_real 함수를 mysqli 문으로 업데이트했습니다. 오류? 경고 : mysqli_real_escape_string()은 정확히 2 개의 매개 변수를 필요로합니다. 1 행의 C : \ xampp \ htdocs \ hashing \ password.php에 있습니다. No. – 99Con

관련 문제