찾다

 >  Q&A  >  본문

SQL 삽입을 위해 PHP 배열 바인딩

<p>SQL 주입을 방지하기 위해 배열 바인딩(첫 번째 배열 바인딩) 시도</p><p>유효한 코드입니다:</p><p><br /> ;</p> ; <pre class="lang-php Prettyprint-override"><code>if (isset($_POST['checkbox_selected'])) { $valuesArr = 배열(); foreach ($_POST['checkbox_selected'] as $key => $value) { //CSVOption 열의 행 번호를 찾기 위해 배열 ID를 검색합니다. $findrow = array_search_partial($attributeid, $value); //양식이 제출되면 속성 값이 속성 ID에 할당됩니다. $속성 = $값; $csv = $csvcolumn[$findrow]; $valuesArr[] = "('$userid', '$feed_id', '$attribute', '$csv')"; } $sql = "INSERT INTO 맵(user_id, Feed_id, attribute_id, csvcolumn) 값 ​​"; $sql .= implode(',', $valuesArr); mysqli_query($conn,$sql); } <p>배열을 바인딩할 수 없습니다. 시도했습니다:</p> <pre class="brush:php;toolbar:false;">$sql = "INSERT INTO 맵(user_id, Feed_id, attribute_id, csvcolumn) VALUES (?, ?, ? ,?)"; $stmt = $conn->prepare($sql); $stmt->bind_param('iiii', implode(',', $valuesArr)); $stmt->execute(); 에코 내파(',', $valuesArr) //('1', '1', '13', '9') //SQL에 삽입된 배열입니다. //(user_id, Feed_id, attribute_id, csvcolumn) //첫 번째 문에 할당된 값은 다음과 같습니다</pre> <p><br /></p>
P粉928591383P粉928591383502일 전544

모든 응답(1)나는 대답할 것이다

  • P粉384679266

    P粉3846792662023-08-09 13:15:28

    두 가지 문제가 있습니다.

    올바른 바인드 구문을 사용하고 있지 않습니다.

    하나의 준비된 문에 여러 행을 삽입하려고 합니다

    으아악

    단 하나의 작은 이점은 하나의 쿼리에 여러 VALUES()를 래핑하려고 하면 암시적 트랜잭션으로 래핑된다는 것입니다. 그러나 이 접근법의 다른 측면은 불리합니다. 바인딩/실행 루프를 래핑하는 트랜잭션을 명시적으로 열면 동일한 이점[오류 롤백, IO 일괄 처리]을 얻는 동시에 준비된 문의 이점[단일 단순 쿼리 구문 분석, 매개 변수화 등]도 활용할 수 있습니다.

    회신하다
    0
  • 취소회신하다