귀하의 3 개 주요 문제 ..
최초의 존재를이 시도 귀하의 의견에 따라 경찰 그리고 쿼리에
if (isset($_POST['searchname']) && isset($_POST['searchfamily'])) {
$sql = "select * from myinfo WHERE `name`='{$_POST['searchname']}' AND family='{$_POST['searchfamily']}' ORDER BY id DESC";
}
else {
$sql = "select * from myinfo ORDER BY id DESC";
}
편집
을 and
-&&
변경 WHERE name=
now .. name
은 이미 mysql에서 사용하고 있으므로 사용하면 안됩니다. 당신이 사용한다면 그것은 그러나 .. 그것은 다음과 같이 실행 :
WHERE `name`=
당신은 항상 역 따옴표 데이터베이스 테이블 및 열은 장거리의 인생을 더 쉽게 만드는 것이다.
이 AND
세 번째해야 당신이 &&
사용되는 두 번째 문제는 SQL 주입을위한 열려있는 당신이 바로 귀하의 요청으로 변수를 배치하지 않아야합니다. 당신이 노력이 무엇
if (isset($_POST['searchname']) || isset($_POST['searchfamily'])) {
$searchName = $_POST['searchname'];
$family = $_POST['searchfamily'];
$sql = $mysqli->prepare("select * from `myinfo` WHERE `name` = ? OR `family`= ? ORDER BY `id` DESC");
$sql->execute([$searchName, $family]);
} else {
$sql = $mysqli->prepare("select * from `myinfo` ORDER BY `id` DESC");
$sql->execute();
}
코드입니다 :
지금 나는 당신이 그러나 당신의 변수로$mysqli
를 사용하는 가정하고 있는데, 이것은 당신이 사용하는 올바른 변수에 맞게 조정해야 할 수도 있습니다 ? – Option'이름이 '% jones %'또는 '% jones %'와 같은 가족 인 경우 – MonkeyZeus
[SQL Injections] (http://php.net/manual/en/security.database.sql-injection. php) 실제로 쿼리를 연결하는 대신 [Prepared Statements] (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)를 사용해야합니다. 특히 사용자 입력을 전혀 피할 수 없기 때문에 특별히 그렇습니다! –