Foreach 어레이를 사용하여 PHP를 사용하여 MySQL에 여러 행을 삽입하십시오.
문제
나는 멈췄다. 지금 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);
해결책
여기에 몇 가지 문제가 있습니다.
- 값 목록에 오프닝 브래킷이 없습니다 (후
VALUES
) - 당신은 달리고 있습니다
mysql_query
모든 반복에foreach
. 대신, 먼저 문자열을 빌드하고 (여러 값 목록 사용)mysql_query
루프 밖. - 당신은 보간 할 수 없습니다
$_POST['project_id']
그런 식으로 문자열로 변수 - 당신은 탈출해야합니다
$_POST
데이터베이스에 넣기 전에 데이터! - 당신은 실제로 사용하지 않습니다
$key
또는$value
쿼리의 Foreach에서, 당신은 그것을 버리고 있습니다. - 루프 내부의 변수 (
$thumb_path
등은 루프의 모든 반복에 대해 동일합니다. 따라서 매번 동일한 데이터를 삽입 할 것입니다. - 루프의 논리는 의미가 없습니다. 당신은 얼마나 오래 알지 못합니다
$_POST
그렇습니다.$_POST
?
이 모든 것을 해결하는 데 도움이되는 힌트 :
- 오류 로그를 확인하십시오.
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);
}
제휴하지 않습니다 StackOverflow