programing

동적 입력 배열에 대한 null 값 삽입

elecom 2023. 8. 31. 23:38
반응형

동적 입력 배열에 대한 null 값 삽입

PHP 버전 7.1.9 사용, MariaDB 10.1.26.

양식 데이터 배열을 MySQL 데이터베이스에 제출합니다.이 양식을 사용하면 동적 입력을 추가할 수 있습니다. 동적 입력을 추가하면 다음과 같이 나타납니다.

// I have removed additional html form code for brevity
<input type="text" name="mac[]">
<input type="text" name="mac[]">
<input type="text" name="mac[]">
etc...

때때로 이러한 입력이 비어 있을 수 있습니다. 이는 허용됩니다.입력이 비어 있으면 다음을 삽입합니다.NULL데이터베이스에 값을 입력합니다.여기가 제가 문제를 겪고 있는 곳입니다.

데이터베이스 테이블이 다음과 같이 설정되어 있는지 확인합니다.

  • null 허용 = 예
  • default - null입니다.

양식 제출을 처리하기 위한 나의 PHP 코드는 아래와 같습니다(간체화된 코드인 보안 취약점은 무시하십시오);

// I have removed additional php code for brevity
$arr_mac = $_POST['mac'] ? "'".$_POST['mac']."'" : 'NULL';
for ($i = 0; $i < count($arr_mac); $i++) {
    $sql = "INSERT INTO staff (mac) VALUES ( ".$arr_mac[$i]." )
}

수신되는 오류는 다음과 같습니다.

SQLSTATE[42000]:구문 오류 또는 액세스 위반: 1064 SQL 구문에 오류가 있습니다. MySQL 서버 버전에 해당하는 설명서에서 올바른 구문을 확인하십시오.

내가 할 때var_dump(mac)알겠습니다;

[mac] => Array
  (
    [0] =>
    [1] => 
    [2] =>  
  )

만약 내가 PHP를 다음과 같이 변경한다면 (추가 사항에 주의하세요.' ') 삽입에서 쿼리가 성공적으로 실행되지만 대신null가치,empty값이 데이터베이스에 삽입됩니다.

$arr_mac = $_POST['mac'] ;
for ($i = 0; $i < count($arr_mac); $i++) {
    $sql = "INSERT INTO staff (mac) VALUES (' ".$arr_mac[$i]." ')
}

어떤 조언이든 감사합니다.

잘못된 구문으로 쿼리를 작성하신 것 같습니다.주어진 코드를 사용하여,INSERT다음과 같이 보일 수 있습니다.

INSERT INTO staff (mac) VALUES ()

코드가 다음을 처리하지 않습니다.NULL대/소문자 구분 - 변수가 다음으로 설정됨NULL리터럴을 사용하지 않습니다.NULL쿼리를 작성하기 위해.

이는 다음과 같은 도움이 될 수 있습니다.

$arr_mac = $_POST['mac'] ? "'".$_POST['mac']."'" : 'NULL';
for ($i = 0; $i < count($arr_mac); $i++) {
    $value = $arr_mac[$i];
    if(!$value) {
        $value = 'NULL';
    } else {
        $value = your_favorite_escaping_algorithm($value);
    }
    $sql = "INSERT INTO staff (mac) VALUES ( ". $value ." )";
}

이것은 특정한 것을 쓰는 데 도움이 됩니다.NULL구문적으로 올바른 쿼리에 필요한 값

$arr_mac = $_POST['mac'] ;
$batchInsert = array();
for ($i = 0; $i < count($arr_mac); $i++) {
    if( "" == trim($arr_mac[$i])) {
        $arr_mac[$i] = 'NULL';
    }
       $batchInsert = array_push($arr_mac[$i]);
}
$insertValues = implode("','", $batchInsert)
$sql = "INSERT INTO staff (mac) VALUES ('$batchInsert')";

***임플로드 함수를 사용하여 ' 및 , 형성 확인

이렇게 하면 단일 INSERT 문에 N개의 값이 삽입되어 훨씬 빠르게 실행됩니다!

언급URL : https://stackoverflow.com/questions/52738597/inserting-null-values-for-dynamic-inputs-array

반응형