내 문제는 너무 많은 따옴표입니다./mysql에 너무 많은 따옴표가 있습니다.
0
A
답변
-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
솔루션 :
이<?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();
+0
좋아요, 확인해 볼게요. 이건 내 학교 프로젝트에요. 그래서 그들은 보안 결점에 신경 쓰지 않아요. 고맙습니다 :) – Nol
은 현대 DB 인터페이스와 바인딩 매개 변수를 사용합니다. 다른 모든 것은 모든 사람의 시간 낭비입니다. – Mat
매트는 바인드 매개 변수를 사용해야한다고 말합니다.하지만 (보안 허점을 포함하고있는 것처럼) 그렇게하고 싶다면 MySQL이 당신을 허용하더라도'WHERE email = 'some string''에 작은 따옴표를 사용해야합니다 거기에 큰 따옴표를 사용하십시오. 그렇다면'$ _POST [\ "email \"]'에 대해 이스케이프 된 큰 따옴표를 사용해야 할 것입니다. 또한 슬래시와 백 슬래시의 차이점을 알아야하며 이스케이프하려고 시도하기 전에 사용해야합니다. – Wodin
그리고 작은 따옴표와 큰 따옴표 사이의 차이는 멋진 방식으로 사용되어서 ...-) – erm3nda