문제

이름, 주소, 도시, 주, 우편번호 값 $name, $address 등에 삽입하고 싶다고 가정해 보겠습니다.

어떻게 달릴 수 있나요? mysql_real_escape_string 삽입하기 전에 각 변수에 대해.각 변수를 작성하는 대신 foreach, 루프 또는 while 메서드가 있어야 합니까?

도와 주셔서 감사합니다.

그래서 내가 가지고 있다면

 $data = array($address, $city, $name);
 array_map('mysql_real_escape_string', $data);

그리고

$columns = "name, address, city, state, zip";
$count = $dbh->exec("INSERT INTO customer($columns) VALUES ($data)");

나는 많은 오류를 겪습니다.

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'root'@'localhost' (using password: NO) in /Users/tommyscott45/Sites/experiment/result.php on line 23

이제 뭐?

도움이 되었습니까?

해결책

호출하려고 할 때 데이터베이스 오류가 발생했습니다 mysql_real_escape_string 그리고 나는 당신이 사용하고 있음을 알았습니다 $dbh->exec() 쿼리를 실행합니다. 이것은 PDO와 함께 데이터베이스에 연결하는 것을 제안하므로 오히려 사용해야합니다. PDO::quote 대신에 mysql_real_escape_string.

또한 다른 사람들이 이미 언급했듯이 문제를 해결하는 더 좋은 방법은 준비된 진술을 사용하고 PDO::prepare.

다른 팁

Sprintf를 사용합니다.

예를 들어

$query = sprintf("INSERT into 
                  TABLE name = '%s', address = '%s', city = '%s'",
                 mysqli_escape_string($link, $name), 
                 mysqli_escape_string($link, $address), 
                 mysqli_escape_string($link, $city) );

아니면 정확히 당신이 찾고 있던 것이 아닙니다. "mysqli_escape_string"을 반복해서 입력하지 않는 방법.

이것은 작동해야합니다.

$data = array($address, $city, $name);
array_map('mysql_real_escape_string', $data);

그러나 실제로 MySQL 확장자를 더 이상 사용해서는 안됩니다. 살펴보십시오 pdo 또는 mysqli 그리고 "준비된 진술"에 대한 그들의지지.

몇 가지 문제가 있습니다.

첫 번째는 출력을 할당해야 한다는 것입니다. array_map() 내부 변환을 수행하지 않으므로 변수로 변환합니다.그런 다음 이를 문자열로 다시 내파해야 합니다.

 $data = "'".implode("', '", array_map('mysql_real_escape_string', $data))."'";

더 큰 문제는 저장하려는 정보를 가져오고 이를 저장하려는 위치에 대한 지식을 사용하여 올바른 인용문을 사용하여 올바른 SQL 문을 조립하는 데이터 액세스 계층을 사용하는 대신 SQL을 직접 조립한다는 것입니다. 그리고 다.

이는 또한 준비된 문을 사용하라는 제안의 원동력이기도 하지만, 준비된 문을 사용하는 것만으로는 여전히 SQL 문을 조합하므로 솔루션의 절반에 불과합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top