2017-11-24 1 views
0

내 문제는 너무 많은 따옴표입니다./mysql에 너무 많은 따옴표가 있습니다.

+4

은 현대 DB 인터페이스와 바인딩 매개 변수를 사용합니다. 다른 모든 것은 모든 사람의 시간 낭비입니다. – Mat

+1

매트는 바인드 매개 변수를 사용해야한다고 말합니다.하지만 (보안 허점을 포함하고있는 것처럼) 그렇게하고 싶다면 MySQL이 당신을 허용하더라도'WHERE email = 'some string''에 작은 따옴표를 사용해야합니다 거기에 큰 따옴표를 사용하십시오. 그렇다면'$ _POST [\ "email \"]'에 대해 이스케이프 된 큰 따옴표를 사용해야 할 것입니다. 또한 슬래시와 백 슬래시의 차이점을 알아야하며 이스케이프하려고 시도하기 전에 사용해야합니다. – Wodin

+1

그리고 작은 따옴표와 큰 따옴표 사이의 차이는 멋진 방식으로 사용되어서 ...-) – erm3nda

답변

-1
$come = mysql_query("SELECT * FROM users WHERE email='".$_POST['email']."' and password='".$_POST['password']."' "); 

이이 문제를 해결해야이 시도 :

$come = mysql_query("SELECT * FROM users WHERE email="/$_POST['email']/" and password="/$_POST['password']/" "); 

는 제발 도와주세요 ...
$come = mysql_query("SELECT * FROM users WHERE email="$_POST['email']" and password="$_POST['password']" "); 

은 그 때 나는이 시도했지만 작동하지 않습니다. 그러나 mysql은 mysqli 또는 pdo를 고려해야합니다. 귀하의 질문에

+1

SQL 인젝션 문제 외에도 mysql에서 문자열 값을 따옴표로 묶어야하므로이 기능은 작동하지 않습니다. – jeroen

+0

Yop, 고맙습니다 ... 점들이 있다는 것을 잊었습니다. :) 감사합니다. :) # NewInMysql – Nol

+0

@jeroen이 당신이 옳았다 고 생각했습니다. – pr1nc3

1

솔루션 :

<?php 
$come = mysql_query(sprintf('SELECT * FROM users WHERE email="%s" and password="%s"', $_POST['email'], $_POST['password'])); 

그러나이 같은 코드를 사용해서는 안됩니다. 당신은 당신의 코드에 SQL Injection을 가지고 있습니다. PDO을 사용하여 다시 작성하십시오.

<?php 

$pdo = new PDO('mysql:host=127.0.0.1;dbname=mydb', 'user', 'password'); 
$stmt = $pdo->prepare('SELECT * FROM users WHERE email=:email and password=:password'); 
$stmt->execute(['email' => $_POST['email'], 'password' => $_POST['password']]); 
$result = $stmt->fetchAll(); 

더 : http://php.net/manual/ru/pdo.prepared-statements.php

+0

좋아요, 확인해 볼게요. 이건 내 학교 프로젝트에요. 그래서 그들은 보안 결점에 신경 쓰지 않아요. 고맙습니다 :) – Nol

관련 문제