Foreach 어레이를 사용하여 PHP를 사용하여 MySQL에 여러 행을 삽입하십시오.

StackOverflow https://stackoverflow.com/questions/1816979

문제

나는 멈췄다. 지금 2 시간 동안 이것을 알아 내려고 노력했다. Foreach 루프를 알아 냈지만 지금 데이터를 삽입하는 방법을 알 수 없습니다.

여기 내 PHP가 있습니다. 내가 뭘 잘못하고 있니?

    $query = "INSERT INTO images (thumb_path, image_path, main_image, project_id) VALUES ";  
foreach($_POST as $key => $value) {
    $query .= "$thumb_path,$image_path,$main_image,$_POST[project_id])";
    $result = mysql_query($query, $connection);
}

감사!

내가 이렇게 배치해야한다면, Foreach의 초보자와 그것이 어떻게 작동하는지 죄송합니다.

foreach($_POST as $key => $value) {
    $query = "INSERT INTO images VALUES (thumb_path, image_path, main_image, project_id),";  
    $query .= "$value[thumb_path], $value[$image_path], $value[$main_image], '$_POST[project_id'])";
}

$result = mysql_query($query, $connection);
도움이 되었습니까?

해결책

여기에 몇 가지 문제가 있습니다.

  1. 값 목록에 오프닝 브래킷이 없습니다 (후 VALUES)
  2. 당신은 달리고 있습니다 mysql_query 모든 반복에 foreach. 대신, 먼저 문자열을 빌드하고 (여러 값 목록 사용) mysql_query 루프 밖.
  3. 당신은 보간 할 수 없습니다 $_POST['project_id'] 그런 식으로 문자열로 변수
  4. 당신은 탈출해야합니다 $_POST 데이터베이스에 넣기 전에 데이터!
  5. 당신은 실제로 사용하지 않습니다 $key 또는 $value 쿼리의 Foreach에서, 당신은 그것을 버리고 있습니다.
  6. 루프 내부의 변수 ($thumb_path 등은 루프의 모든 반복에 대해 동일합니다. 따라서 매번 동일한 데이터를 삽입 할 것입니다.
  7. 루프의 논리는 의미가 없습니다. 당신은 얼마나 오래 알지 못합니다 $_POST 그렇습니다. $_POST?

이 모든 것을 해결하는 데 도움이되는 힌트 :

  1. 오류 로그를 확인하십시오.
  2. var_dump 쿼리를 실행하기 전에 SQL의 문자열은 구문 적으로 논리적으로 정확한지 확인합니다.

추가 도움을 원한다면 제안합니다 var_dump 무엇이 있습니다 $_POST, 쿼리가 어떻게 생겼는지 쓰고 여기에 둘 다 게시하십시오. 그렇다면 누군가가 당신이 당신을 하나에서 다른 사람으로가는 것을 도울 것입니다.

다른 팁

나는 당신이하고있는 것처럼 반복 된 문자열을 연결하는 것보다 이와 같은 것이 훨씬 쉽다는 것을 알았습니다.

$values = array();
foreach ($_POST as $key => $value) {
    $qvalue = mysql_real_escape_string($value);
    $values[] = "($field1, $field2, $field3, $qvalue)"; // quoted value, not the raw value
}

$query_values = implode(',', $values);

$query = "INSERT INTO images (field1, field2, field3, field4) VALUES $query_values";
$result = mysql_query($query, $connection);

이와 같은 쿼리를 구축 할 때 Max_Packet 길이를 제외하고는 충분히 큰 쿼리를 빌드 할 수 있으며,이 경우 인서트를 여러 개의 작은 쿼리로 분할해야합니다.

먼저 mysql_real_esape_string을 사용하여 $ _post [project_id]를 탈출하십시오.

그런 다음 통사론 테이블 값 (...), (...)에 삽입됩니다.

// escape your input
$_POST = array_map('addslashes', $_POST);

// rather than recursively calling mysql_query, you can insert all your rows with one query
// INSERT INTO table (columns) VALUES (data), (data), (data), ...
$values = array();
foreach($_POST as $key => $value) {
    $values[] = "('{$_POST['thumb_path']}', '{$_POST['image_path']}', '{$_POST['main_image']}', '{$_POST['project_id']}')";
}
if(sizeof($values)) {
    $query = "INSERT INTO images (thumb_path, image_path, main_image, project_id) VALUES ".implode(',', $values);
    $result = mysql_query($query, $connection);
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top